基本構文
pg_dump --create --clean --if-exists --schema-only \
-U [user_name] [database_name] \
> [file_name]
オプションについて
いくつかオプションを指定していますが、こちらは必要なものを選びましょう。上の例で指定しているオプションについては解説をしておきます。
-
--schema-only: 各テーブルに蓄えられているデータではなく、テーブル定義のみをダンプしている。 -
--crean:CREATE DATABASEコマンドを出力。 -
--clean --if-exists:DROP DATABASE IF EXISTSコマンドを出力。
Docker
単体のコンテナを動かしている場合は以下のようになります。
docker exec [container] pg_dump --create --clean --if-exists --schema-only \
-U [user_name] [database_name] \
> [file_name]
括弧[]で囲んだ部分は人によって異なる部分です。
Compose
docker-composeを使って複数のコンテナを同時に動かしている場合は以下のようになります。
docker-compose exec [service] pg_dump --create --clean --if-exists --schema-only \
-U [user_name] [database_name] \
> [file_name]
括弧[]で囲んだ部分は人によって異なる部分です。
ポートフォワーディング
ポートフォワーディングしていて、且つローカルマシンにpg_dumpコマンドがインストールされている場合は以下のようにもできるかもしれません。
pg_dump --create --clean --if-exists --schema-only -h localhost -p [port] \
-U [user_name] [database_name] \
> [file_name]
ただし、ローカルマシンとコンテナのpd_dumpのバージョンが一致していなくてはなりません。一致していない場合は以下のようなエラーが出力され、ダンプができません。
pg_dump: server version: 11.1; pg_dump version: 10.6
pg_dump: aborting because of server version mismatch
せっかくコンテナを使っているのですから、コンテナの中で済ませたほうが良いでしょうね。