Postgresql

pg_restore 在外鍵約束上失敗

  • March 31, 2022

我需要從使用**“自定義格式”**創建的備份中恢復 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 標誌僅恢復模式,然後修改表“刪除有問題的約束”,然後恢復表內容

幾篇有用的文章 不同的轉儲

和我很久以前寫的關於備份的維基文章

…使用“自定義格式”創建的備份,以便以後可以從中提取單個表。

我需要從頭開始恢復整個數據庫,包括結構和數據。

你的初衷是只恢復一張表,現在你想恢復整個東西?如果是這樣,我不明白這個問題。如果您將整個事物還原到一個空數據庫中,則對象應按其正常工作的順序進行還原。你不是恢復到一個空的數據庫嗎?

您能否分享用於備份和還原的命令行?

引用自:https://dba.stackexchange.com/questions/255522