为什么在 postgres 中更新表需要硬盘存储?

问题描述 投票:0回答:1

我需要更新 postgis 数据库中的列。

我想用这个来做到这一点:

UPDATE cj_geometry SET groundgeometry = CASE WHEN NOT ST_IsValid(groundgeometry) THEN ST_Multi(ST_CollectionExtract(ST_MakeValid(groundgeometry), 3)) ELSE ST_MakeValid(groundgeometry) END

大约有 65,000,000 行。

我确实让它运行了一个小时左右,然后意识到设备上没有剩余空间。所以我退出查询并重新启动数据库。它确实重新启动了,但现在超级大,没有新数据。所以有两个问题。

  1. 如何恢复到原来的大小?
  2. 为什么要使用这么多硬盘?我怎样才能避免这种情况?

非常感谢!

postgresql postgis
1个回答
0
投票

要收缩表,请结束所有长时间运行的事务,关闭所有准备好的事务,删除所有过时的复制槽并运行

VACUUM (FULL) table_name;

问题的可能原因是:

  1. 您在单个事务中运行了所有更新,或者存在一个并发的长时间运行的事务

  2. 您运行更新的速度太快,以至于 autovacuum 无法跟上

© www.soinside.com 2019 - 2024. All rights reserved.