Postgresql 等价于 sqlite pragma

sky*_*yde 1 postgresql sqlite performance postgresql-performance

如果我想从 postgresql 中获得最佳性能,那么下面的 sqlite pragma 相当于什么。

pragma synchronous = OFF;
pragma journal_mode = OFF;
pragma count_changes = OFF;
pragma temp_store = MEMORY;
Run Code Online (Sandbox Code Playgroud)

Kas*_*dry 6

这些 pragma 为 SQLite 所做的大部分工作可以通过使用UNLOGGED 表TEMPORARY 表来最好地完成。

这也很明显,这些是临时表,不是崩溃或重启安全的。它还强调了在极快的速度与数据持久性之间存在非常真实的权衡。

从SQLite的PRAGMA 文档开始,我试图将它们转换为等效的 PostgreSQL GUC 变量。

pragma synchronous = OFF;大致相当于将synchronous_commit设置为关闭。如果您使用的是 TEMPORARY 或 UNLOGGED 表,则此设置将没有实际影响,因为无论如何这些类型的表实际上并未写入 WAL。

pragma journal_mode = OFF; 关闭 WAL,在 PostgreSQL 中,您只能对 UNLOGGED 或 TEMPORARY 表执行此操作。

pragma temp_store = MEMORY;PostgreSQL 中的临时表可以写入磁盘,但是设置temp_buffers应该可以让您在内存中保留更多的表以获得更好的性能。

pragma count_changes = OFF; 在 SQLite 中不推荐使用,在 PostgreSQL 中没有意义。

Robert Haas 有一篇关于Temporary and Unlogged Tables的精彩博

无论您做什么,请确保不要将任何表空间放在 RAM 中。以下两篇博文详细说明了这些危险。

PostgreSQL 在 ramdisk 上没有表空间

无法从丢失表空间中恢复