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