Postgresql autovacuum以防止环绕卡在损坏的表上

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

我有一个无法安全杀死的进程:autovacuum:VACUUM public.mytable(防止环绕)

此表已被清除(除了由于硬件问题期间表损坏而无法删除的某些条目)并且无法删除,因为真空阻止了这一点。我不得不运行kill -9来停止这个过程并重新启动数据库,但是你无法禁用这个autovacuum(以防止[transaction]环绕),所以autovacuum会重新启动并立即被这个损坏的表卡住。

对此有何见解?

postgresql corruption autovacuum
1个回答
0
投票

首先,关闭数据库服务器并将数据目录的物理副本放到安全的地方。然后你可以截断损坏的表的数据文件。例如。:

--Get datafile path
db=# SELECT pg_relation_filepath('corrupted_table');
 pg_relation_filepath 
----------------------
 base/1234/56789
(1 row)
  1. 输入数据库目录(例如:data / base / 1234)
  2. 将文件重命名为56789_bkp
  3. 创建一个名为56789的空文件:touch 56789
  4. 启动数据库服务器
  5. 发出truncate table来强制PostgreSQL覆盖数据文件:TRUNCATE TABLE corrupted_table;
  6. 您可能需要VACUUM并在之后进行备份

希望这可以帮助。

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