はじめに
リレーショナルデータベースでは、データベーススキーマは、データベースの構造と、テーブル、フィールド、インデックスなどのコンポーネントパーツを定義します。この情報を抽出してエクスポートすることは、バックアップ、新しい環境への移行、データ構造の視覚化、コードベース内でのこれらの構造の管理など、多くのシナリオで役立ちます。
このショートガイドでは、pg_dump
コマンドを使用して PostgreSQL データベーススキーマをエクスポートする方法について説明します。このユーティリティは PostgreSQL からさまざまな種類のデータをエクスポートできますが、このガイドではデータ構造自体の抽出に焦点を当てます。
Prisma Client を使用して、JavaScript または TypeScript アプリケーション内から PostgreSQL データベースを管理できます。既存のプロジェクトに Prisma を追加する方法、または Prisma を最初から始める方法について学びます。
基本的な使用方法
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 つのテーブルが EMPLOYEE
、STORE
、および 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
結論
スキーマをエクスポートできることで、データベース構造をデータベース自体の外部に保存できます。これは、新しい環境をセットアップしたり、ニーズの変化に合わせてスキーマを進化させたり、保存している情報の構造を視覚化したりするのに役立ちます。
Prisma Client を使用して、JavaScript または TypeScript アプリケーション内から PostgreSQL データベースを管理できます。既存のプロジェクトに Prisma を追加する方法、または Prisma を最初から始める方法について学びます。