Postgresql

為什麼我的 pg_restore 命令不起作用?

  • April 11, 2019

昨天,我使用以下命令創建了各種 PostgreSQL 數據庫的備份:

pg_dump -Fc -d junk -h localhost -p 5434 -U postgres -W > z:\pg_dump\96_junk.dump

我為每個數據庫創建了一個單獨的備份。

今天,我正在嘗試使用以下命令將它們還原到升級的數據庫伺服器:

pg_restore -h localhost -p 5434 -U postgres -W -C -v z:\pg_dump\96_junk.dump

當我pg_restore使用上述執行時,似乎數據庫已恢復。控制台螢幕顯示了一系列 SQL 語句和我希望看到的有關此數據庫的其他消息,最後,“PostreSQL 數據庫轉儲完成”是顯示的輸出。

當我檢查數據庫時,數據庫不存在。我究竟做錯了什麼?

使用版本資訊

  • 使用9.6.0版創建的備份
  • 嘗試使用版本9.6.1進行恢復

-d嘗試使用or--dbname參數指定要開始的數據庫的名稱。當我遇到同樣的問題時,這對我有用。請注意,它不必是目標數據庫:

pg_restore -h localhost -p 5434 -U postgres -d postgres -W -C -v z:\pg_dump\96_junk.dump

就像 Jen RS 所說,使用“-d”選項時它會起作用。

不使用“-d”時在控制台中顯示的輸出是預期的行為;在文件中說:

pg_restore 可以在兩種模式下執行。如果指定了數據庫名稱,pg_restore 將連接到該數據庫並將歸檔內容直接恢復到數據庫中。**否則,將創建包含重建數據庫所需的 SQL 命令的腳本並將其寫入文件或標準輸出。**此腳本輸出等價於 pg_dump 的純文字輸出格式。

當沒有指定數據庫時,pg_restore 會生成所有命令,然後您可以將輸出重定向到一個文件,然後直接執行該文件。

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