web-dev-qa-db-ja.com

pg_dumpからデータを復元してもデータは上書きされませんが、元のデータベースにデータが追加されます

「pg_dumpdatabase_name> backup.sql」を使用してpostgresデータベースのダンプを取得しています。後で、元のデータベース(database_name)にいくつかの変更を加えてから、バックアップファイル(backup.sql)からデータを復元しています。しかし、その結果、データベースは元の状態に復元されず、代わりに元のデータが変更されたデータ(変更された+元の)に追加されます。元の状態に復元したいのですが、すべて削除しますか?データベースの元の状態を提供するため、バックアップファイルから復元する前にデータベースからデータを取得します。または、これを行う他の方法はありますか?

7
SonamGupta

デフォルトの形式 fo pg_dumpはプレーンなので、COPYステートメントを作成します。したがって、psql backup.sqlを実行すると、既存のデータに対してそれらのcopyを実行するだけです。データを書き換えるには、最初にテーブルを削除するか、pg_dump -F candpg_restore -cを削除する必要があります。

警告-どちらの場合も、古いデータを破壊します(これはあなたが望むようですが)

-c --cleanデータベースオブジェクトを再作成する前に、それらをクリーンアップ(ドロップ)します。 (--if-existsが使用されていない限り、宛先データベースにオブジェクトが存在しない場合、これにより無害なエラーメッセージが生成される可能性があります。)

@Craig Ringerが示唆しているように、バックアップからのドロップ/再作成ははるかに簡単でクリーンです。データベースを削除するには、DROP DATABASE auを実行します-成功するために接続されたユーザーがいないことに注意してください。次に、db:CREATE DATABASE auを作成し、psql -f backup.sql -d auを実行する必要があります。

5
Vao Tsun