[英]Postgres: alter table to unlogged
我已經看到了這個答案, 如何將PostgreSQL UNLOGGED功能應用於現有表? ,這基本上表明將表轉換為未記錄的方法是運行:
CREATE UNLOGGED TABLE your_table_unlogged AS SELECT * FROM your_table;
這仍然是這種情況,因為雖然這是一個明顯的工作解決方案,但對於大型表,可能會有時間和磁盤空間因素發揮作用。 並且,如果是的話,有人可以簡要解釋一下Postgres的體系結構意味着你需要重寫整個表以使其無法登錄嗎?
更新 :在PostgreSQL 9.5+中有ALTER TABLE ... SET LOGGED
和... SET UNLOGGED
如果wal_level
> minimal
,則從UNLOGGED
轉換為LOGGED
需要將整個表的數據寫入xlog,以便副本獲得副本。 所以它不是免費的,但它仍然值得創建一個未記錄的表,填充它然后設置它記錄如果你有一堆清理和刪除和合並工作在初始加載后在表上做。
是的,9.4中的情況仍然如此。
從記錄到UNLOGGED
轉換在理論上並不是AFAIK,但是沒有人完成這項工作。 主要的是必須重新檢查引用它的所有約束和類型等,以確保沒有從另一個記錄表引用到該表。 大多數注意力都集中在另一個案例上,因此如果這個功能對您很重要,請考慮為其開發提供資金或自己參與開發。
對於不參與流復制或使用archive_command
節點,可以將UNLOGGED
轉換為已記錄。 這並不簡單,因為需要處理表的數據沒有被發送但突然改變它的事實 - 復制協議需要進一步增強以允許在繼續之前對表進行基本復制。
顯然這個(alter table ... set logged | unlogged)已在(即將發布的)postgresql 9.5中實現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.