Postgresql

pg_restore 錯誤:“關係不存在”並創建新數據庫

  • April 5, 2018

我已經對要還原到新數據庫的特定表進行了備份,方法是:

call pg_dump -Fc -h server -d database -U user -p password -v -f dump.sql -t public.table1 -t public.table2

我沒有問題。

然後我想通過使用 pg_restore 創建一個新數據庫來恢復轉儲:

call pg_restore --clean --create -d temp -h server -p password -U user dump.sql

這給了我一個“數據庫臨時不存在”錯誤。據我所知,這應該已經創建了數據庫並恢復了它。

我然後手動創建“臨時”數據庫並執行:

call pg_restore --clean --create -d temp -h server -p password -U user dump.sql

這會繼續,但不會創建表並給我一個錯誤“ relation table1”和“ relation table2”不存在,只為兩個表創建相應的 id_sewuences。

我真正想要的是不必手動創建新數據庫,並且備份中的所有表都通過 pg_restore 恢復到一個全新的數據庫中,使用:

call pg_restore --clean --create -d temp -h server -p password -U user dump.sql

據我了解。

請幫助,非常沮喪

--create-d一起使用時,參數 to-d不是創建的數據庫的名稱,而是要連接以執行CREATE DATABASE語句的現有數據庫的名稱,因為如果您尚未連接到另一個數據庫,則無法創建數據庫.

這被記錄為:

使用此選項時,以 -d 命名的數據庫僅用於發出初始 DROP DATABASE 和 CREATE DATABASE 命令。所有數據都恢復到存檔中出現的數據庫名稱中。

這就是為什麼不存在數據庫臨時pg_restore錯誤的原因

您應該在還原過程中添加一個createdb步驟,因為無論如何您都想創建一個特定的數據庫名稱,而不是來自備份的名稱。

對於第二個問題,這是一個完全不同的問題,如果沒有完整的錯誤消息,很難猜測它為什麼會發生。

另請注意,-p後面不是密碼,而是埠號。

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