gav*_*koa 6 postgresql vacuum postgresql-performance
目前尚不清楚当列设置为 时 Postgres 采取的策略NULL
:
UPDATE tbl SET
col1 = NULL,
col2 = NULL
WHERE created < current_date - INTERVAL '1 year';
Run Code Online (Sandbox Code Playgroud)
文档https://www.postgresql.org/docs/current/mvcc.html有点冗长和技术性,所以我无法可靠地推断:
是否就地执行设置为 NULL 或复制受影响的行/页?
看起来任何 UPDATE 都应该为 MVCC 语义创建新行,但如果设置为 NULL 是一种特殊情况怎么办?
为了遵守 GDPR,我认为要清空所有个人历史数据,并尝试理解大规模定期数据的含义UPDATE SET x = NULL
。我应该考虑VACUUM
之后吗?
Lau*_*lbe 10
UPDATE
PostgreSQL 从不通过修改现有数据来执行操作。如果将 columns 设置为NULL
,则将像任何其他行版本一样创建新的行版本UPDATE
,并且先前的行版本将保留到VACUUM
回收它们为止。
但请注意
\nVACUUM
仅当不存在仍可能需要旧数据的长时间运行的事务时,才会删除旧的行版本。VACUUM
不会覆盖数据,因此旧值仍将保留在磁盘上,直到重新使用空间。关于 GDPR,措辞是:
\n\n\n数据主体有权要求控制者立即删除与其有关的个人数据,控制者有义务立即删除个人数据
\n
该法律中没有对术语 \xe2\x80\x9cerasure\xe2\x80\x9d 进行定义,因此需要对其进行解释。我敢打赌,很少有人能够很好地理解 PostgreSQL 的内部运作方式来质疑这种DELETE
擦除行为。需要具有高级 PostgreSQL 知识的数据取证专家才能检索此类数据。一旦VACUUM
跑了,就几乎不可能做到这一点。如果我作为专家证人被传唤到法庭,我会说任何DELETE
在数据库中运行过的人都已采取一切可能的步骤来删除数据。
如果您感到偏执,请VACUUM
在有问题的桌子上安排一个常客,并确保您没有长时间运行的事务。除此之外的任何担忧都是愚蠢的。
归档时间: |
|
查看次数: |
24642 次 |
最近记录: |