Postgresql
UPDATE SET x = NULL 的 Postgres 策略
當列設置為時,Postgres 採取的策略尚不清楚
NULL
:UPDATE tbl SET col1 = NULL, col2 = NULL WHERE created < current_date - INTERVAL '1 year';
文件https://www.postgresql.org/docs/current/mvcc.html有點冗長和技術性,所以我不能可靠地推斷:
如果設置為 NULL 或複制受影響的行/頁?
看起來任何 UPDATE 都應該為 MVCC 語義創建新行,但如果設置為 NULL 是一種特殊情況怎麼辦?
對於 GDPR 合規性,我認為將所有個人歷史數據都歸零,並嘗試理解大量週期性的含義
UPDATE SET x = NULL
。之後我應該考慮VACUUM
嗎?
PostgreSQL 從不
UPDATE
通過修改現有數據來執行。如果您將 columns 設置為NULL
,將像任何其他 一樣創建新的行版本UPDATE
,並且之前的行版本將保留直到VACUUM
回收它們。但請注意
VACUUM
如果沒有長時間執行的事務仍可能需要舊數據,則只會刪除舊行版本。VACUUM
不會覆蓋數據,因此舊值仍將保留在磁碟上,直到空間被重新使用。關於 GDPR,措辭是:
數據主體有權要求控制者及時刪除與其有關的個人數據,控制者有義務及時刪除個人數據
該法律沒有對“擦除”一詞進行定義,因此需要對其進行解釋。我敢打賭,很少有人能夠充分了解 PostgreSQL 的內部工作原理,從而對
DELETE
擦除進行質疑。並且需要具有高級 PostgreSQL 知識的數據取證專家來檢索這些數據。一旦VACUUM
執行,幾乎不可能做到這一點。如果我作為專家證人被傳喚到法庭,我會說DELETE
在數據庫中執行過的任何人都已採取所有可能的步驟來刪除數據。如果您感到偏執,
VACUUM
請在有問題的桌子上安排一個正常,並確保您沒有長時間執行的事務。除此之外的任何擔心都是愚蠢的。