web-dev-qa-db-ja.com

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

これにより、「データベース一時が存在しません」エラーが発生します。これでデータベースが作成され、私が理解している限り復元されているはずです。

ただし、「temp」データベースを手動で作成して実行します。

call pg_restore --clean --create -d temp -h server -p password -U user dump.sql

これは続きますが、テーブルを作成せず、エラー「relation table1 "および" relation table2 "は存在せず、2つのテーブルに対応するid_sewuencesを作成するだけです。

私が実際に必要なのは、新しいデータベースを手動で作成する必要がなく、バックアップ内のすべてのテーブルがpg_restoreを使用して新しいデータベースに復元されることです。

call pg_restore --clean --create -d temp -h server -p password -U user dump.sql

私が理解しているように。

助けてください、非常にイライラします

4
Ian23

--create-dを一緒に使用する場合、-dの引数はnot作成するデータベースの名前であり、接続する既存のデータベースの名前です。 CREATE DATABASEステートメントを実行します。これは、まだ別のデータベースに接続していないとデータベースを作成できないためです。

これは 文書化 として:

このオプションを使用すると、-dで指定されたデータベースは、最初のDROP DATABASEコマンドとCREATE DATABASEコマンドを発行するためにのみ使用されます。すべてのデータは、アーカイブに表示されるデータベース名に復元されます。

これがpg_restoredatabase tempが存在しないというエラーを出力する理由です

とにかく特定のデータベース名を作成したいので、バックアップからのものではないため、createdbステップを復元手順に追加する必要があります。

2番目の問題の場合、それは完全に異なる質問であり、完全なエラーメッセージなしで発生する理由を推測することは困難です。

また、-pの後にパスワードではなくポート番号が続くことにも注意してください。

4
Daniel Vérité