Postgresql
pg_restore 錯誤:“關係不存在”並創建新數據庫
我已經對要還原到新數據庫的特定表進行了備份,方法是:
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
後面不是密碼,而是埠號。