Postgresql

臨時表數據創建後去哪了?

  • December 21, 2021

據我所知temp_buffers,設置服務用於儲存臨時表數據。

但是當我創建了一個臨時表時,會立即在內部為它創建文件PGDATA以及主數據庫。因此,我將感謝您對幾個問題的幫助。

  1. 會發生什麼

。臨時表數據是否temp_buffers 足以儲存臨時表數據?

灣。臨時表數據是否temp_buffers 不足以儲存臨時表數據? 2. 是否有任何情況下沒有足夠的temp_buffers 設置最終溢出pgsql_tmp

在每個. pg_class_ pg_attributes_ 我無法在 postgresql 原始碼中提到此行為清晰可見的地方。文件創建遠非. 可以從這裡開始閱讀pg_catalog``create temp table``create temp table

寫入這些臨時表的數據將儲存在temp_buffers後端私有記憶體中的特殊記憶體結構中。像 一樣工作shared_buffers,但簡單得多,因為我們不關心崩潰後此類臨時數據的並發訪問和恢復。

如果temp_buffers數據不夠用 -temp_buffers區域內的舊頁面將被逐出並寫入相應的關係文件。

是否有任何情況下沒有足夠的 temp_buffers 設置最終溢出到 pgsql_tmp?

沒有永不。顯式臨時表儲存在正常數據庫目錄t<backendOID>_中,文件名中帶有可見前綴(如$PGDATA/base/13709/t3_226351)。


請不要在 postgresql 中頻繁創建或刪除臨時表(每秒數十次)。這會導致系統目錄膨脹,從而減慢任何查詢。postgresql 中的臨時表不是“免費的”。

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