[英]How do I reliably determine whether pg_restore succeeded, when success sometimes results in an exit code of 1?
運行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。
事實證明,Postgres實際上並不知道問題中提到的錯誤是相對無害的; 這不是錯誤被忽略的原因。 pg_restore
實際上忽略該錯誤的原因是因為pg_restore
默認配置為忽略恢復過程中發生的幾乎所有錯誤。 如果您關心還原的成功/失敗狀態,這可能不是您想要的行為。 使用--exit-on-error
或--single-transaction
選項運行pg_restore
可以解決這個問題,但也會導致Postgres將上述問題中的錯誤視為一個完整的致命錯誤,而不僅僅是一個警告(因為再一次,它實際上並不知道該特定命令失敗是可以的。
解決此問題的最佳方法是采取措施防止錯誤發生。 在這種情況下,您可能通過在運行pg_restore
之前使用單獨的命令刪除表 ,並且不使用--clean
選項來執行--clean
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.