Postgresql

Postgresql 等價於 sqlite pragma

  • October 1, 2015

如果我想從 postgresql 中獲得最佳性能,那麼下面的 sqlite pragma 相當於什麼。

pragma synchronous = OFF;
pragma journal_mode = OFF;
pragma count_changes = OFF;
pragma temp_store = MEMORY;

這些 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 上沒有表空間

無法從表空間失去中恢復

引用自:https://dba.stackexchange.com/questions/116749