Postgresql
Postgresql 等價於 sqlite pragma
如果我想從 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。以下兩篇部落格文章詳細說明了這些危險。