web-dev-qa-db-ja.com

pg_restoreが正常に戻るのにデータベースを実際に復元しないのはなぜですか?

次のコマンドを使用してダンプしたLinuxサーバーにPostgres 8.4データベースがあります。

pg_dump --format=c --exclude-table=log --file=/path/to/output my_db

次に、作成したファイルをローカルのWindows 7マシンにftpし、次のコマンドを使用してローカルのPostgres 8.4インスタンスにファイルを復元しようとします。

pg_restore --create --exit-on-error --verbose c:\path\to\file

Restoreコマンドは、データベースを作成し、データベースに接続し、他のすべてのテーブルを期待どおりに作成したと主張する大量の出力を生成します。ただし、pgAdminを使用してローカルマシン上のデータベースを表示すると、復元されたデータベースはまったく存在しません。

トラブルシューティングを試みて、次のコマンドを試しました。

pg_restore --create --exit-on-error --verbose --Host=blahblah --username=no_one c:\path\to\file

指定されたホストとユーザー名がまったく無意味であるにもかかわらず、このコマンドを実行すると、コマンドからまったく同じ出力がエラーなしで得られます。

誰もこれに遭遇したことがありますか、これを引き起こすことによって何ができるか知っていますか?

56
Mike Deck

最初に接続するために有効なデータベースの名前を追加する必要があります。追加しないと、内容がSTDOUTにダンプされます。

pg_restore --create --exit-on-error --verbose --dbname=postgres <backup_file>
107
Matthew Wood

これはまだわかりにくいので、-dbnameを作成したいdbにする必要があるということを実行しようとしました。

pg_restore --create --exit-on-error --verbose --dbname=jiradb jiradb.tar

違う!!

文字通り--dbname postgresである必要があります。--createはファイル内の名前から実際のdbを作成します。私の場合、tarバックアップから復元しました

pg_restore --create --exit-on-error --verbose --dbname=postgres jiradb.tar
3
tgunr