在 postgresql 中更新单列需要大量时间和大量磁盘空间

Vit*_*ala 1 postgresql postgresql-9.6

我对包含 1000 万条记录的单列执行了更新查询。在 postgresql 中它花费了大量的时间和大量的磁盘空间。请找到以下查询。“更新测试集 record_status = 'I' ;” 我的列数据类型是“ char(1)

请告诉我为什么它花费大量时间和大量磁盘空间。

谢谢,维塔尔

Lau*_*lbe 5

在 PostgreSQL 中,UPDATE创建行(“元组”)的新版本(例如,请参阅文档的这一部分)。

因此,通过更新表中的每一行,您可以有效地将表的大小加倍。旧的行版本会被 autovacuum 删除,但表的大小保持不变(它变得“臃肿”)。

空的空间可以被未来的INSERTs 重用,但是如果你想摆脱它,请使用VACUUM (FULL).

持续时间长也可以通过许多新元组来解释。增加max_wal_size可能会通过减少由语句引起的检查点数量来帮助一些人。