その必要はありません。それはあなたが何を達成したいかによります。で単一のデータベースをダンプする場合pg_dump
、コマンドは含まれません。既存のデータベースに接続する必要があります。したがって、最初に作成する必要があります。マニュアルからのアドバイス
を引用します:CREATE DATABASE
ALTER DATABASE
データベース クラスタに template1 データベースへのローカルの追加がある場合は、pg_dump の出力を完全に空のデータベースに復元するように注意してください。そうしないと、追加されたオブジェクトの定義が重複するためにエラーが発生する可能性があります。ローカルに何も追加せずに空のデータベースを作成するには、template1 ではなく template0 からコピーします。次に例を示します。
CREATE DATABASE foo WITH TEMPLATE template0;
また:
ダンプ ファイルには、ALTER DATABASE ... SET コマンドも含まれていません。これらの設定は、データベース ユーザーやその他のインストール全体の設定とともに、pg_dumpall によってダンプされます。
pg_dumpall
一方、ユーザーなどのメタオブジェクトを含むDB クラスター全体をダンプします。ステートメントを含みCREATE DATABASE
、復元時に各 DB に接続します。( ) オプションDROP DATABASE
を使用してステートメントを含めることもできます。そこは気をつけて。-c
--clean
PostgreSQL のすべてのインスタンスには、「postgres」という名前のデフォルトのメンテナンス データベースがあり、これに接続して、たとえばデータベースを作成したり、(pg_dumpall から) 完全な復元を開始したりできます。ただし、(pg_dump からの) 単一 DB ダンプは、そのターゲット データベースに対して実行する必要があります。
ついに:
復元したら、各データベースで ANALYZE を実行して、オプティマイザが有用な統計を取得することをお勧めします。また、vacuumdb -a -z を実行してすべてのデータベースを分析することもできます。