PostgreSQL / ショートガイド

PostgreSQLでデータベースとテーブルのスキーマをエクスポートする方法

共有

はじめに

リレーショナルデータベースでは、データベーススキーマは、データベースとその構成要素(テーブル、フィールド、インデックスなど)の構造を定義します。この情報を抽出およびエクスポートすることは、バックアップ、新しい環境への移行、データ構造の視覚化、コードベース内でのこれらの構造の管理など、多くのシナリオで役立ちます。

この短いガイドでは、pg_dumpコマンドを使用してPostgreSQLデータベーススキーマをエクスポートする方法について説明します。このユーティリティはPostgreSQLからさまざまな種類のデータをエクスポートできますが、このガイドではデータ構造自体を抽出することに焦点を当てます。

基本的な使用法

PostgreSQLからデータベーススキーマをエクスポートするために必要な基本的なコマンドは次のとおりです。

pg_dump --schema-only DATABASE > schema.sql

PostgreSQLの設定によっては、以下のオプションの一部を含める必要がある場合があります。

  • --username= / -U: 認証に使用するデータベースユーザー名
  • --password / -W: 認証のためにpg_dumpにパスワードの入力を強制する
  • --host= / -h: PostgreSQLが配置されているホスト名またはIPアドレス
  • --port= / -p: PostgreSQLがリッスンしているポート番号

pg_dumpにデータ自体ではなくデータベース構造のみを含めるよう指示するオプションは、--schema-onlyです。

  • --schema-only: -s: オブジェクト定義のみをエクスポートし、データ自体はエクスポートしない。

さらに、最初の非オプション引数(ここでは「DATABASE」という単語で表される)は、エクスポートする正確なデータベースを示します。

この情報を使用して、sales_reporterという制限されたユーザーでSALESというデータベースのスキーマを次のようなコマンドでエクスポートできます。

pg_dump --username=sales_reporter --password --schema-only SALES > sales_database_schema.sql

エクスポート動作の変更

上記で説明した基本的な使用法では、対象のデータベースに関連するすべての構造が出力されます。この動作は、いくつかの追加オプションを使用するか、場合によっては関連するpg_dumpallコマンドを使用して変更できます。

複数のデータベースを対象にする

pg_dumpコマンドは、単一のデータベースに関連する情報をエクスポートするように設計されています。一度に複数のデータベースを対象にするには、代わりにpg_dumpallコマンドを使用できます。これは同様の構文に従います。

PostgreSQLクラスター内のすべてのデータベーススキーマをダンプするには、次のように入力します。

pg_dumpall --schema-only > all_schemas.sql

ダンプされるデータベースを制限したい場合は、オプションで--exclude-database=オプションを含めることができます。これは個々のデータベースを対象にするために複数回使用できます。

pg_dumpall --schema-only --exclude-database=FIRST --exclude-database=SECOND > almost_all_schemas.sql

また、ワイルドカード形式のマッチングを使用して、単一のパターンで複数のデータベースを対象にすることもできます。

pg_dumpall --schema-only --exclude-database='SALES_*' > all_schemas_except_sales.sql

特定の構造のみをエクスポートする

エクスポートする特定のテーブルを指定することで、エクスポートされる構造を減らすこともできます。

  • --table= / -t: 指定されたパターンに一致するテーブルのみをダンプする。複数回指定可能。
  • --exclude-table= / -T: 指定されたパターンに一致するテーブルを除外する。複数回指定可能。

例えば、SALESデータベースにEMPLOYEESTOREINVENTORYという3つのテーブルがあり、すべてデフォルトのpublicスキーマで定義されている場合、次のように入力してそれらの構造のみをエクスポートできます。

pg_dump --schema-only --table='public."EMPLOYEE"' --table='public."STORE"' --table='public."INVENTORY"' SALES > some_sales_tables.sql

注意: PostgreSQLが異なる種類の引用符をどのように解釈するかについては、PostgreSQLでシングルクォートとダブルクォートを使用する方法に関するガイドで詳しく知ることができます。

これら3つのテーブルを除くすべての売上データが必要な場合は、代わりに次を使用します。

pg_dump --schema-only --exclude-table='public."EMPLOYEE"' --exclude-table='public."STORE"' --exclude-table='public."INVENTORY"' SALES > some_sales_tables.sql

その他の関連オプション

目標によっては、以下の追加オプションが役立つ場合があります。

  • --create / -C: ダンプする構造体の前に、データベース自体を作成するコマンドを含める。
  • --clean / -c: データベースオブジェクトを作成する前に削除するコマンドを出力する。
  • --if-exists: --cleanと共に使用した場合にのみ関連し、pg_dumpがデータベース内に既に存在するデータベースオブジェクトのみを削除しようとするようにする。

例えば、スキーマエクスポートにデータベース自体を作成するコマンドを含めたい場合は、次のように入力します。

pg_dump --schema-only --create SALES > sales_db_schema.sql

SALESデータベース内のデータベースオブジェクトを作成する前にすべて削除したい場合は、代わりに次を使用できます。

pg_dump --schema-only --clean --if-exists SALES > sales_db_schema.sql

まとめ

スキーマをエクスポートできると、データベース構造をデータベース自体とは別に保存できます。これは、新しい環境をセットアップしたり、ニーズの変化に合わせてスキーマを進化させたり、保存している情報の構造を視覚化したりする際に役立ちます。

著者について
Justin Ellingwood

ジャスティン・エリングウッド

ジャスティンは2013年からデータベース、Linux、インフラストラクチャ、開発者ツールについて執筆しています。現在は妻と2匹のウサギとともにベルリンに住んでいます。彼は通常、三人称で書く必要がないため、関係者全員にとって安心です。
© . All rights reserved.