我需要更新 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 行。
我确实让它运行了一个小时左右,然后意识到设备上没有剩余空间。所以我退出查询并重新启动数据库。它确实重新启动了,但现在超级大,没有新数据。所以有两个问题。
非常感谢!
要收缩表,请结束所有长时间运行的事务,关闭所有准备好的事务,删除所有过时的复制槽并运行
VACUUM (FULL) table_name;
问题的可能原因是:
您在单个事务中运行了所有更新,或者存在一个并发的长时间运行的事务
您运行更新的速度太快,以至于 autovacuum 无法跟上