簡體   English   中英

Postgresql 中 ALTER 命令占用的空間

[英]Space consumed by ALTER command in Postgresql

問題陳述:在 postgresql 表中,對於列 'id' 類型 'serial integer',我收到錯誤消息“Integer out of range”

RCA:因為它是一個序列號為 integer 的列,已經超出了它的最大范圍 2147483647。而且它無法加載更多數據

解決方案:需要將列的數據類型從INTEGER改為BIGINT。

對於這個解決方案,我嘗試執行 ALTER 命令 ALTER TABLE table_name ALTER COLUMN id TYPE BIGINT 但該表包含超過 20 億條數據。 由於在執行 ALTER COMMAND 期間 DB 空間變滿,並且執行在兩者之間停止。 現在我找不到空間被利用的地方(500GB)。

問題:如何/在哪里清除在數據庫用戶中執行 ALTER 命令期間消耗的空間

ALTER TABLE 需要復制表來為 bigint 創建一個具有更多空間的新表。 在這個過程接近尾聲時,舊表和新表(及其所有索引)將同時暫時存在。 如果沒有足夠的空間來容納這個,那么你通常會得到一個錯誤,事務會回滾,不完整的新表和索引會自動清理。 如果您只在錯誤發生后才查看磁盤使用情況,那么您將看不到正在使用的空間,因為它已經被清理干凈了。

根據您的評論,聽起來您不僅遇到了常規錯誤,而且遇到了崩潰。 如果你在錯誤的時間用完 pg_wal 上的空間,你可能會崩潰。 (通常最好將 pg_wal 放在與數據目錄的 rest 不同的分區上,這樣數據目錄上的普通空間不足情況不會變成崩潰。)

PostgreSQL 正在運行,剛剛空間不足? 還是您根本無法重新啟動並運行它?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM