Postgresql
臨時表數據創建後去哪了?
據我所知
temp_buffers
,設置服務用於儲存臨時表數據。但是當我創建了一個臨時表時,會立即在內部為它創建文件
PGDATA
以及主數據庫。因此,我將感謝您對幾個問題的幫助。
- 會發生什麼
。臨時表數據是否
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 中的臨時表不是“免費的”。