【发布时间】:2015-11-15 19:57:18
【问题描述】:
运行pg_restore --clean --dbname=my_database backup_file.sql 将数据库转储恢复到空数据库时,恢复成功,但出现以下警告消息:
pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 161; 1259 16549 TABLE example_table root
pg_restore: [archiver (db)] could not execute query: ERROR: table "example_table" does not exist
Command was: DROP TABLE public.example_table;
WARNING: errors ignored on restore: 1
如消息所示,恢复成功。有错误,但pg_restore 声称忽略了它们。我还能够手动查询数据库,以验证我希望转储中的所有数据在还原后都存在于数据库中。
问题是上面的命令退出时状态为 1,而不是 0。以编程方式执行数据库恢复时(正如我打算在自动化此过程时所做的那样),这是有问题的,因为我的脚本需要能够可靠地判断恢复是否成功。
有没有办法让pg_restore 在确定其退出状态时忽略警告?或者我可以使用pg_restore 的替代方法来获得更准确的成功/失败信息?如何还原数据库并以编程方式可靠地确定还原是否成功?
请注意,我目前使用的是 PostgreSQL 9.1。
【问题讨论】:
-
添加
--clean选项对我有帮助。我试图使用$?读取bash 中的退出状态。在不使用--clean选项运行时,$?返回1,而使用--clean选项运行时$?返回0