有没有办法让 pg_dump 忽略错误而不是停止?

Dea*_*gor 6 postgresql postgresql-9.4

我正在运行 postgres 9.4 DB 的 pg_dump,如果其他进程在表上具有独占锁,它偶尔会遇到错误。有没有办法让 pg_dump 忽略该表并继续处理数据库的其余部分,而不是仅仅停下来?

小智 3

pg_dump 缺少此功能,正确的解决方案是通过添加类似 的标志来增强它--ignore-errors,注释忽略了备份某些表总比不备份好这一点。在您只想恢复某些表的情况下,这会很有帮助。

您可以使用几个选项来实现解决方法:

  1. 使用下面的参数将超时减少到 10 秒,记录该表并从新的 pg_dump 命令动态地排除该表。 --lock-wait-timeout=timeout --exclude-table=table

  2. 如果您有备用数据库,请使用它来进行备份,这样发生此问题的可能性就会较小。

  3. 如果问题是由于某些未记录的阶段表引起的,您可以使用下面的参数来忽略它们(我还没有对此进行测试,所以不能 100% 确定) --no-unlogged-table-data

  4. 编写一个包装器脚本并备份每个架构或表,这样,如果发生故障,您将错过一个架构或表,您必须确保实现类似的包装器以进行恢复,因为手动执行此操作会出现问题,而且这也会在数据库级别不一致。