Postgresql
為什麼 pg_restore –create 不起作用?
app_data
我使用以下基本命令在 9.3 伺服器上備份了一個名為 的數據庫:pg_dump -n public -F custom app_data > app_data.pg.dump
然後我嘗試在另一台伺服器(執行 9.4)上恢復它,如下所示:
pg_restore -C -d postgres app_data.pg.dump
但是它將所有表都放入
postgres
數據庫中。手冊頁說它將創建和使用一個新的數據庫,app_data
.-C –創建
在還原到數據庫之前創建數據庫。
$$ … $$ 使用此選項時,以 -d 命名的數據庫僅用於發出初始 DROP DATABASE 和 CREATE DATABASE 命令。所有數據都恢復到存檔中出現的數據庫名稱中。
那不是它正在做的事情。檔案中的名稱是
app_data
:bash-4.2$ pg_restore -l app_data.pg.dump ; ; Archive created at Tue Dec 15 04:16:52 2015 ; dbname: app_data ...
難道我做錯了什麼?
是的,我應該向 postgres 報告這種行為,因為使用不同的標誌似乎沒有效果,而且它只是不起作用。要解決它,請使用:
- 創建數據庫
createdb -h HOST -U USER -W DB_NAME
- 恢復並在錯誤停止的情況下
egrep -v 'EXTENSION.*plpgsql' DUMPFILE.sql | psql -h HOST -U USER -W -d DB_NAME -v ON_ERROR_STOP=1
pg_restore -C -d postgres app_data.pg.dump
但它將所有表都放在 postgres 數據庫中
這不正是您要求它與“-d postgres”參數做的事情嗎?
如果你想載入一個不同的數據庫,你需要告訴 pg_restore:
pg_restore -d app_data -C app_data.pg.dump