Dean MacGregor Asked: 2017-04-18 07:32:02 +0800 CST2017-04-18 07:32:02 +0800 CST 2017-04-18 07:32:02 +0800 CST 有没有办法让 pg_dump 忽略错误而不是停止? 772 我正在运行我的 postgres 9.4 DB 的 pg_dump,如果其他进程在表上具有排他锁,它偶尔会遇到错误。有没有办法让 pg_dump 忽略该表并继续处理数据库的其余部分,而不是仅仅停止在其轨道上? postgresql postgresql-9.4 1 个回答 Voted Best Answer virtual void 2017-09-07T06:31:51+08:002017-09-07T06:31:51+08:00 pg_dump 中缺少此功能,正确的解决方案是通过添加类似 的标志来增强它--ignore-errors,评论忽略了备份某些表总比没有好这一点。在您只想恢复某些表的情况下,这会很有帮助。 您可以使用几个选项来实施解决方法: 使用下面的参数将超时减少到 10 秒,记录表并从新的 pg_dump 命令中动态排除该表。 --lock-wait-timeout=timeout --exclude-table=table 如果您有备用数据库,请使用它来进行备份,并且您发生此问题的可能性较小。 如果问题是由于一些未记录的阶段表引起的,您可以使用下面的参数来忽略它们(我没有测试过,所以不能 100% 确定) --no-unlogged-table-data 编写一个包装器脚本并备份每个模式或表,这样如果发生故障,您将错过一个模式或表,您必须确保实现一个类似的包装器进行还原,因为手动操作会出现问题,这也会在数据库级别不一致。
pg_dump 中缺少此功能,正确的解决方案是通过添加类似 的标志来增强它
--ignore-errors
,评论忽略了备份某些表总比没有好这一点。在您只想恢复某些表的情况下,这会很有帮助。您可以使用几个选项来实施解决方法:
使用下面的参数将超时减少到 10 秒,记录表并从新的 pg_dump 命令中动态排除该表。
--lock-wait-timeout=timeout
--exclude-table=table
如果您有备用数据库,请使用它来进行备份,并且您发生此问题的可能性较小。
如果问题是由于一些未记录的阶段表引起的,您可以使用下面的参数来忽略它们(我没有测试过,所以不能 100% 确定)
--no-unlogged-table-data
编写一个包装器脚本并备份每个模式或表,这样如果发生故障,您将错过一个模式或表,您必须确保实现一个类似的包装器进行还原,因为手动操作会出现问题,这也会在数据库级别不一致。