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 データベース内の 3 つのテーブルが EMPLOYEESTORE、および INVENTORY と呼ばれ、すべてデフォルトの 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

Justin Ellingwood

Justin は、2013 年からデータベース、Linux、インフラストラクチャ、および開発者ツールについて執筆しています。彼は現在、妻と 2 羽のウサギと一緒にベルリンに住んでいます。彼は通常、三人称で書く必要はありません。これは関係者全員にとって安心です。