pg_restore 在外鍵約束上失敗
我需要從使用**“自定義格式”**創建的備份中恢復 PostgreSQL 數據庫,以便以後可以從中提取單個表。(根據文件,無法從純文字備份中自動提取單個表。)
因為備份是作為二進製文件創建的,所以我沒有編輯它的選項,只能使用
pg_restore
. 因為它沒有載入到數據庫中,所以我沒有設置禁用約束的選項。(第 22 條規定)當我嘗試使用
pg_restore
還原自定義轉儲時,由於外鍵約束而失敗。我已經查看了十幾個或更多關於
pg_restore
外鍵約束的文章,但它們都要求數據庫已經載入到 PostgreSQL 中,以便我可以禁用這些約束。我需要從頭開始恢復整個數據庫,包括結構和數據。備份已經存在。首先,我並不是在尋找一種不同的方式來轉儲它(儘管如果這是唯一的選擇,我想了解一下)。
pg_dump
我沒有在文件中找到任何pg_restore
解決此問題的內容。我發現很難認為 PostgreSQL 會允許創建不可恢復的轉儲。肯定有一個簡單的答案嗎?
問題:有沒有辦法恢復包含大量外鍵約束的自定義格式轉儲 PostgreSQL DB,包括模式和數據?
- 編輯:
我有點驚訝,但正如 zsheep 建議的那樣,備份似乎已損壞。
從頭開始,我現在可以完成整個備份過程,刪除現有數據庫,並從備份中恢復(在每個步驟中確認),沒有失敗或錯誤:
pg_dump -Fc -f DBnnn-BLANK my_db
psql -U my_user -d postgres
刪除數據庫 my_db;\q
createdb -T template1 my_db
pg_restore -d my_db DBnnn-BLANK
就在這裡。
您是否嘗試過 pg_restore –disable-triggers ???然而
如果這不起作用,那將是奇怪的
您可以使用 –schema 標誌僅恢復模式,然後修改表“刪除有問題的約束”,然後恢復表內容
幾篇有用的文章 不同的轉儲
…使用“自定義格式”創建的備份,以便以後可以從中提取單個表。
我需要從頭開始恢復整個數據庫,包括結構和數據。
你的初衷是只恢復一張表,現在你想恢復整個東西?如果是這樣,我不明白這個問題。如果您將整個事物還原到一個空數據庫中,則對象應按其正常工作的順序進行還原。你不是恢復到一個空的數據庫嗎?
您能否分享用於備份和還原的命令行?