web-dev-qa-db-ja.com

PostgreSQL-復元したい場合、データベースを削除して再作成する必要がありますか?

私は多くの異なるデータベース(SQL Server、Oracle、IBM db2)を操作しましたが、バックアップがあれば、データを復元するためにRESTOREコマンドを実行するだけで十分です。

私はPostgreSQLの初心者です。

ドキュメントとこの質問で私が見るように https://stackoverflow.com/questions/35289888/restore-postgres-database-dump データベースの正常な復元のために:

* DROP database
* CREATE database
* execute psql dbname < dumpfile

(他のすべてのデータベースの動作に基づいて)復元したい場合にデータベースを削除して再作成する必要があると本当に混乱していますか? Postgresが実際にそのように実装されていると私が信じるのは難しいです。

1
Dejan

pg_dumpオプションを指定して--cleanを実行すると、生成されたSQLダンプには、ダンプされたすべてのオブジェクトのdropステートメントが含まれます(カスタム形式とpg_restoreを使用する場合、ダンプするときにこれを決定する必要はありませんが、復元するとき)。

ただし、ターゲットデータベースに、ソースに含まれていないテーブル(または他のオブジェクト)が含まれている場合、それらはnotが削除されます。

pg_dump --clean(またはpg_restore --clean)の使用は、OracleのimpdpでのTABLE_EXISTS_ACTION=REPLACEの使用とほぼ同じ動作です。それでも、ソースの一部ではないテーブルは削除(置換)されません。

ソースに含まれていないターゲット内のテーブルが存在しないようにするために、ダンプをインポートする前にデータベース全体を単純に削除することがよくあります。ただし、これは(--cleanオプションを使用する場合)実際には必要ありません。