Postgresql

為什麼 pg_restore –create 不起作用?

  • December 17, 2021

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

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