我需要更新 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 无法跟上