PostgreSQL

PostgreSQL pg_dumpを使ってDDL出力

スキーマ単位でDDL取得
pg_dump -h vm022 -d myposdb -U postgres --schema=sooni --schema-only --encoding UTF8 --file=schema_sooni_ddl_utf8.sql
オプション解説
  • -h ホスト名
  • -d データベース名
  • -U データベース接続ユーザ
  • –shema = 対象スキーマ名
  • –schema-only データ定義(DDL)のみという意味(もともとpg_dumpはバックアップをを目的にしているので、このオプションをつける事で「データが除外」される。
  • –encoding UTF8 バックアップファイルのエンコーディングを指定
  • –file= ファイル名 出力ファイル名
テーブルDDLをスキーマで絞って取得
 pg_dump -h vm022 -d myposdb -U postgres -t "sooni.*" --schema-only --encoding UTF8 --file=sooni_tables_ddl_utf8.sql
オプション解説
  • -t “sooni.*” -tでテーブルを示すので、sooniスキーマ配下全てのテーブルという意味
–section を指定した取得

本当はインデックス用のみDDLとか、トリガーのみとか、ストアドファンクションのみとかに絞りたいのですが、それはできないようです。以下実質2パターンをうまく利用するしかないようです。

–section=(data/pre-data/post-data)の3種類が指定できます。

pg_dump -h vm022 -d myposdb -U postgres --schema=sooni --section=pre-data  --file=sooni_pre_ddl.sql
pg_dump -h vm022 -d myposdb -U postgres --schema=sooni --section=post-data  --file=sooni_post_ddl.sql
オプション解説
  • –section=data テーブルデータ、ラージオブジェクト、シーケンス値など「実際の値」を意味するのでDDL取得目的の場合は使用しない。
  • –section=post-data インデックス用DDL、トリガー用DDL、ルール用DDL、制約用DDLが対象になります。
  • –section=pre-data 上記以外全てのDDLが対象
スポンサーリンク
タイトルとURLをコピーしました