当成功有时导致退出代码为1时,如何可靠地确定pg_还原是否成功?

运行pg_restore--clean--dbname=my_database backup_file.sql将数据库转储还原到空数据库时,还原成功,但会显示以下警告消息:

处理TOC时出现pg_restore:[archiver(db)]错误:
pg_restore:[archiver(db)]来自TOC条目161的错误;1259 16549表格示例_表格根
pg_restore:[archiver(db)]无法执行查询:错误:表“example_table”不存在
命令为:DROP TABLE public.example_TABLE;
警告:还原时忽略错误:1

如消息所示,恢复成功。有错误,但pgu restore声称忽略了这些错误。我还能够手动查询数据库,以验证在恢复后,我希望转储中的所有数据是否都存在于数据库中

问题是上面的命令已退出,状态为1,而不是0。当以编程方式执行数据库恢复时(正如我打算在自动化此过程时所做的那样),这是有问题的,因为我的脚本需要能够可靠地确定恢复是否成功

在确定退出状态时,是否有办法使pg_restore忽略警告?或者是否有其他方法可用于pg_restore以获得更准确的成功/失败信息?如何恢复数据库并以编程方式可靠地确定恢复是否成功

请注意,我目前正在使用PostgreSQL 9.1

事实证明,博士后并不知道问题中提到的错误是相对无害的;这不是忽略错误的原因。之所以pg_restore实际上忽略了该错误,是因为pg_restore默认配置为忽略还原过程中发生的几乎所有错误。如果您关心恢复的成功/失败状态,那么这可能不是您想要的行为。使用--exit on error--single transaction选项运行pg_restore,可以解决这一问题,但也会导致Postgres将上述问题中的错误视为全面的致命错误,而不仅仅是警告(因为它实际上并不知道该特定命令失败是可以的)

最好的解决方法是首先采取措施防止错误发生。在这种情况下,您可能需要在运行pg_restore之前使用单独的命令删除表,并关闭--clean选项

发表评论