簡體   English   中英

如果成功有時導致退出代碼為1,我如何可靠地確定pg_restore是否成功?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM