我的 PostgreSQL 資料庫中有一個表變得很大,里面塞滿了很多無用的行。由于這些無用的行占我表資料的 99.9%(大約 330 萬行),我想知道洗掉它們是否會對我的資料庫產生不良影響:
我知道此操作可能需要一些時間,并且我將能夠在維護操作期間阻止對表的寫入,但我想知道資料中的這種巨大變化是否也會影響操作本身后的性能。
我找到了諸如創建新表/使用 TRUNCATE 洗掉所有行之類的解決方案,但由于此操作將是特定的并且是一次性的,因此我希望能夠選擇最適合的解決方案。
我知道 Postgre SQL 有一個 VACUUM 機制,但我不是 DBA 專家:誰能確認這個洗掉不會影響我的表完整性/資料結構,如果需要新資料,釋放的空間將被回收?
PostgreSQL 11.12,具有 AWS RDS 上的默認設定。我的表上沒有任何索引,行洗掉的標準不會基于 PK
uj5u.com熱心網友回復:
洗掉行通常不會縮小 PostgreSQL 表,因此您必須運行VACUUM (FULL)以壓縮它,在此期間表無法訪問。
如果您要洗掉許多行, theDELETE和 theVACUUM (FULL)都將花費很長時間,這樣您會好得多:
創建一個與舊表一樣定義的新表
INSERT INTO new_tab SELECT * FROM old_tab WHERE ...復制要保留的行洗掉指向舊表的外鍵約束
在新表上創建所有索引和約束
洗掉舊表并重命名新表
通過仔細計劃,您可以縮短停機時間。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/340200.html
標籤:PostgreSQL
上一篇:每次遷移都會改變uuid列的學說
