この記事では、PostgreSQL に組み込まれている仕組みのひとつである information_schema について詳しく見ていきます。
読み進める前に、私たちのモダンで高速な PostgreSQL データベースマネージャーである Beekeeper Studio をご紹介させてください。テーブルやカラムからインデックス、外部キーまで、同じメタデータをサイドバーと構造ビューで確認できます。PostgreSQL では無料でお使いいただけます。こちらからダウンロードしてください。
Information_Schema とは?
Information_schema は、PostgreSQL のデータベースオブジェクトに関する情報を含む標準的なビューのセットで構成されたシステムカタログです。つまり、現在のデータベースに関する情報を保持するメタデータベースです。標準に準拠したすべての SQL データベースエンジンに存在するため、移行時に非常に役立ちます。
なお、information_schema は読み取り専用であり、新しい情報の挿入や既存データの変更はできません。それでは、さまざまな用途で役立つ information_schema 内の各ビューを見ていきましょう。
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'information_schema';
このコードはすべての PostgreSQL バージョンで動作します。
実行すると、information_schema 内でユーザーが利用できるすべてのビューの一覧が返されます。
Information_Schema を使う理由
information_schema は、データベース構造をより効率的に扱ううえで非常に重要です。主に次のような対象に関係します:
- テーブル
- カラム
- インデックス
- トリガー
- 制約
- スキーマ
Information_Schema.Tables
information_schema.tables ビューには、接続中のデータベース内のすべてのテーブルに関する詳細が含まれています。
SELECT table_name
FROM information_schema.tables
WHERE table_type = 'BASE TABLE'
AND table_schema NOT IN ('pg_catalog', 'information_schema');
このコードはすべての PostgreSQL バージョンで動作します。出力は、データベース内のすべてのベーステーブルの一覧になります。
Information_Schema.Columns
information_schema.columns ビューでは、データベース内のカラムの詳細を取得できます。
SELECT table_name, column_name, data_type
FROM information_schema.columns
WHERE table_schema NOT IN ('pg_catalog', 'information_schema')
AND table_name = 'your_table';
このコードはどの PostgreSQL バージョンでも動作します。‘your_table’ を対象のテーブル名に置き換えると、指定したテーブル内のすべてのカラムとそのデータ型の一覧が得られます。
Information_Schema.Triggers
トリガーに関する情報は、デバッグや依存関係の把握に役立ちます。information_schema.triggers ビューを使うと、データベースに紐づくトリガーの詳細を取得できます。
SELECT event_object_table, trigger_name, action_statement, action_timing
FROM information_schema.triggers;
このコードはすべての PostgreSQL バージョンで動作し、テーブル名、トリガー名、トリガーのアクション、およびそのタイミングを返します。
Information_Schema.Key_Column_Usage
information_schema.key_column_usage ビューは、データベース内の外部キーの関係を把握しやすくする情報を提供します。
SELECT constraint_name, table_name, column_name, ordinal_position
FROM information_schema.key_column_usage
WHERE table_name = 'your_table';
‘your_table’ を対象のテーブル名に置き換えてこのコード(すべての PostgreSQL バージョンで動作)を実行すると、指定したテーブル内の各キーについて constraint_name、table_name、column_name、ordinal_position を取得できます。
まとめ
このチュートリアルでは、PostgreSQL の information_schema について詳しく解説しました。information_schema のビューを活用すれば、データベースの構造や要素をより細かく管理し、より深い洞察を得ることができます。他の SQL データベースから PostgreSQL へ移行する場合、information_schema のビューは SQL の標準の一部であるため、特に便利に感じられるはずです。
PostgreSQL の旅はここで終わりではありません。PostgreSQL の広大な世界をさらに掘り下げ、より高度なトピックやヒント、テクニックを紹介する今後のガイドもお楽しみに。
Beekeeper Studio は無料のオープンソース PostgreSQL GUI です
まさに探していた PostgreSQL クライアントです!UI が他とは一線を画しています。すっきりしていて直感的、しかも強力。使いにくい PGAdmin とはお別れです。 - David Cyprian
Beekeeper Studio は高速で直感的、使いやすい PostgreSQL クライアントです。他にも多数のデータベースに対応しており、Windows、Mac、Linux で快適に動作します。
PostgreSQL ユーザーによる Beekeeper Studio の評価
pgAdmin と違い、Beekeeper は驚くほどシンプルに使えるのに機能も充実しています。しかも価格も手頃です!データベースのバックアップ機能は特に便利です。本当に素晴らしいソフトウェアです。
素晴らしいツールです。Postgres と MySql の DB 管理に使える IDE として、これまでで最も実用的です。面倒なことなく、とにかくちゃんと動きます :-)