我有一个无法安全终止的进程正在运行: autovacuum: VACUUM public.mytable (以防止环绕)
该表已被清除(除了一些由于硬件问题导致表损坏而无法删除的条目)并且不能被删除,因为真空正在阻止它。我不得不运行 kill -9 来停止这个过程并重新启动数据库,但是你不能禁用这个自动清理(以防止 [事务] 环绕),所以自动清理会重新启动并立即被这个损坏的表卡住。
对此有任何见解吗?
我有一个无法安全终止的进程正在运行: autovacuum: VACUUM public.mytable (以防止环绕)
该表已被清除(除了一些由于硬件问题导致表损坏而无法删除的条目)并且不能被删除,因为真空正在阻止它。我不得不运行 kill -9 来停止这个过程并重新启动数据库,但是你不能禁用这个自动清理(以防止 [事务] 环绕),所以自动清理会重新启动并立即被这个损坏的表卡住。
对此有任何见解吗?
首先,关闭数据库服务器并将数据目录的物理副本复制到安全的地方。然后你可以截断损坏表的数据文件。例如:
--Get datafile path
db=# SELECT pg_relation_filepath('corrupted_table');
pg_relation_filepath
----------------------
base/1234/56789
(1 row)
touch 56789
TRUNCATE TABLE corrupted_table;
希望这可以帮助。