PostgreSQL 言語データベースの情報スキーマ

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

情報スキーマは、すべての PostgreSQL データベースに共通する組み込みスキーマです。データベースのスキーマ メタデータをフェッチするために information_schema にあるテーブルで SQL クエリを実行できます。

たとえば、以下のクエリはデータベース内のすべてのユーザー定義テーブルの名前をフェッチします。

  SELECT
    table_name
  FROM
    information_schema.tables
  WHERE
    table_schema = 'public'

Usage

  • information_schema テーブルは、SQL インターフェースを介してのみ利用できます。次に例を示します。

    • executeQueryAPI
    • gcloud spanner databases execute-sql コマンド
    • Google Cloud コンソールのデータベースの [クエリ] ページ。

    他の単一読み取りメソッドは、information_schema をサポートしていません。

PostgreSQL の information_schema との違い

PostgreSQL 言語データベースの information_schema のテーブルは、オープンソース PostgreSQL 用の information_schema のテーブルの列を含んでおり、場合によっては Spanner の列も含んでいます。これらのテーブルでは、オープンソース PostgreSQL の列が最初にオープンソース PostgreSQL データベースと同じ順番で挿入され、Spanner 用の個別の列はその後に追加されます。Google Cloud CLI で PostgreSQL 言語データベースを使用する場合は、information_schema のオープンソース PostgreSQL バージョン用に作成されたクエリを変更せずにそのまま使用できます。

PostgreSQL 言語データベースの information_schema には、他にも以下のような大きな違いがあります。

  • オープンソース PostgreSQL のテーブル列の一部は使用できますが、PostgreSQL 言語データベースには入力されません。
  • PostgreSQL 言語データベースでは、スキーマ名に public を使用します。
  • 自動生成された制約名には、オープンソース PostgreSQL データベースとは異なる形式を使用します。
  • PostgreSQL 言語データベースでサポートされていないオープンソース PostgreSQL 機能に関連するテーブルは使用できません。
  • Spanner で使用できるがオープンソース PostgreSQL では使用できないいくつかのテーブル(database_optionsindex_columnsindexesspanner_statistics など)を使用できます。

PostgreSQL 言語データベースの information_schema のテーブル

information_schema 内のテーブルとビューは、オープンソース PostgreSQL の information_schema 内のテーブルとビューと互換性があります。

以降のセクションでは、PostgreSQL 言語データベースの information_schema のテーブルとビューについて説明します。

check_constraints

check_constraints ビューには、CHECK キーワードまたは NOT NULL キーワードのいずれかによって定義されたチェック制約ごとに 1 行が含まれます。

列名 説明
constraint_catalog character varying データベース名。
constraint_schema character varying 制約のスキーマ名。PostgreSQL 言語データベースの場合、デフォルトは「public」です。
constraint_name character varying 制約の名前。制約の名前がスキーマで明示的に指定されていない場合は、自動生成された名前が使用されます。
check_clause character varying チェック制約の式。
spanner_state character varying チェック制約の現在の状態。取り得る状態は次のとおりです。
  • VALIDATING: PostgreSQL 言語データベースは、「ALTER CONSTRAINT」または「ADD CONSTRAINT」コマンドに対して既存のデータを検証します。
  • COMMITTED: この制約に有効なスキーマの変更はありません。

column_column_usage

このビューには、同じテーブル内の別のベース列に依存する生成された列がすべて列挙されます。

列名 説明
table_catalog character varying データベース名。
table_schema character varying テーブルを含むスキーマの名前。デフォルトのスキーマの場合、この名前は「public」となり、他のスキーマ(たとえば、information_schema 自体)では空以外になります。この列は null にできません。
table_name character varying 生成された列を含むテーブルの名前。
column_name character varying 生成された列が依存するベース列の名前。
dependent_column character varying 生成された列の名前。

column_options

このビューには、外部キー制約の参照先のテーブル列に定義されているすべてのオプションが列挙されます。ビューには、現在のユーザーが(オーナーとして、または特権で)アクセスできる参照テーブルの列だけが含まれます。

列名 説明
table_catalog character varying データベース名。
table_schema character varying 外部テーブルを含むスキーマの名前。この名前は、デフォルトのスキーマでは「public」となり、他のスキーマでは空以外(たとえば information_schema 自体)になります。この列は null になりません。
table_name character varying 外部テーブルの名前。
column_name character varying 列の名前。
option_name character varying オプションを一意に識別する SQL 識別子。この識別子は、DDL の OPTIONS 句のキーです。
option_value character varying このオプションの値を表す SQL リテラル。この列の値は、クエリの一部として解析できます。
option_type character varying このオプション値の型であるデータ型の名前。

columns

このビューは、データベース内のすべてのテーブル列(またはビュー列)に関する情報を提供します。ビューには、現在のユーザーが(オーナーとして、または特権で)アクセスできる列のみが含まれます。

列名 説明
table_catalog character varying データベース名。
table_schema character varying テーブルを含むスキーマの名前。この名前は、デフォルトのスキーマでは「public」となり、他のスキーマでは空以外(たとえば information_schema 自体)になります。この列は null になりません。
table_name character varying テーブルの名前
column_name character varying 列の名前
ordinal_position BIGINT テーブル内での列の位置(1 から始まります)
column_default character varying 列のデフォルト値のオープンソース PostgreSQL 式の文字列表現(例: '9'::bigint)。
is_nullable character varying 列が Nullable であるかどうかを示す文字列。SQL 標準に従い、この文字列はブール型ではなく、YESNO になります。
data_type character varying 列のデータ型。値は次のいずれかです。
  • 組み込み型の場合は、データ型の名前。
  • 配列の場合は、値 ARRAY。データ型の詳細については、ビュー「element_types」をご覧ください。
character_maximum_length BIGINT 文字列およびビット文字列データ型の宣言された最大長。最大長が指定されていない場合、値は「NULL」になります。列のデータ型が文字またはビット文字列でない場合、値は 「NULL」になります。
character_octet_length BIGINT 現在は使用されていません。値は常に「NULL」です。
numeric_precision BIGINT 現在の列の数値データ型の有効桁数。「倍精度」の場合、値は 53 です。「bigint」の場合、値は 64 です。他のすべてのデータ型の場合、値は「NULL」です。
numeric_precision_radix BIGINT 数値型の有効桁数の基数(単位)。現時点では 2 つの値のみがサポートされています。
  • 2(「double precision」、「float8」、「bigint」の場合)
  • 10(「numeric」の場合)
他のすべてのデータ型の場合、値は「NULL」です。
numeric_scale BIGINT 数値列型のスケール(基数点以降の精度の基本単位の数)。「bigint」の場合、値は 0 です。他のすべてのデータ型の場合、値は「NULL」です。
datetime_precision BIGINT 現在は使用されていません。値は常に「NULL」です。
interval_type character varying 現在は使用されていません。値は常に「NULL」です。
interval_precision BIGINT 現在は使用されていません。値は常に「NULL」です。
character_set_catalog character varying 現在は使用されていません。値は常に「NULL」です。
character_set_schema character varying 現在は使用されていません。値は常に「NULL」です。
character_set_name character varying 現在は使用されていません。値は常に「NULL」です。
collation_catalog character varying 現在は使用されていません。値は常に「NULL」です。
collation_schema character varying 現在は使用されていません。値は常に「NULL」です。
collation_name character varying 現在は使用されていません。値は常に「NULL」です。
domain_catalog character varying 現在は使用されていません。値は常に「NULL」です。
domain_schema character varying 現在は使用されていません。値は常に「NULL」です。
domain_name character varying 現在は使用されていません。値は常に「NULL」です。
udt_catalog character varying 現在は使用されていません。値は常に「NULL」です。
udt_schema character varying 現在は使用されていません。値は常に「NULL」です。
udt_name character varying 現在は使用されていません。値は常に「NULL」です。
scope_catalog character varying 現在は使用されていません。値は常に「NULL」です。
scope_schema character varying 現在は使用されていません。値は常に「NULL」です。
scope_name character varying 現在は使用されていません。値は常に「NULL」です。
maximum_cardinality BIGINT 現在は使用されていません。値は常に「NULL」です。
dtd_identifier character varying 現在は使用されていません。値は常に「NULL」です。
is_self_referencing character varying 現在は使用されていません。値は常に「NULL」です。
is_identity character varying 現在は使用されていません。値は常に「NULL」です。
identity_generation character varying 現在は使用されていません。値は常に「NULL」です。
identity_start character varying 現在は使用されていません。値は常に「NULL」です。
identity_increment character varying 現在は使用されていません。値は常に「NULL」です。
identity_maximum character varying 現在は使用されていません。値は常に「NULL」です。
identity_minimum character varying 現在は使用されていません。値は常に「NULL」です。
identity_cycle character varying 現在は使用されていません。値は常に「NULL」です。
is_generated character varying 列が生成されるかどうかを示す文字列。文字列は、生成された列の場合は ALWAYS、生成されていない列の場合は NEVER になります。
generation_expression character varying 生成された列の SQL 式を表す文字列。列が生成された列でない場合は NULL になります。
is_updatable character varying 現在は使用されていません。値は常に「NULL」です。
spanner_type character varying 列の DDL 互換型を保持する文字列。
is_stored character varying 生成された列が格納されているかどうかを示す文字列。生成された列の場合、文字列は常に YES または NO で、生成されていない列の場合は NULL になります。
spanner_state character varying 列の現在の状態。新しく保存された生成列が既存のテーブルに追加されると、完全に使用可能になる前に、ユーザーがモニタリング可能な複数の状態を経由する場合があります。有効な値は次のとおりです。
  • NO_WRITE: 列への読み取りや書き込みはできません。この状態で保存された生成列を使用しても、クライアントには影響がありません。
  • WRITE_ONLY: 列はバックフィルされます。読み取りはできません。
  • COMMITTED: この列はすべて使用できます。
  • NULL: システム スキーマの列に使用されます。

constraint_column_usage

このビューには、制約で使用される列ごとに関連する 1 つの行が表示されます。

  • NOT NULL キーワードで定義された PRIMARY KEY 制約と CHECK 制約の場合、ビューにはこれらの列が含まれます。
  • CHECK キーワードで作成された CHECK 制約の場合、ビューにはチェック制約式で使用される列が含まれます。
  • 外部キー制約の場合、ビューには参照先テーブルの列が含まれます。
  • UNIQUE 制約の場合、ビューには KEY_COLUMN_USAGE の列が含まれます。

列名 説明
table_catalog character varying データベース名。
table_schema character varying 制約によって使用される列を含むテーブルを含むスキーマの名前。
table_name character varying 制約によって使用される列を含むテーブルの名前。
column_name character varying 制約によって使用される列の名前。
constraint_catalog character varying データベース名。
constraint_schema character varying 制約のスキーマ名。
constraint_name character varying 制約の名前。

constraint_table_usage

このビューには、制約で使用されるテーブルごとに 1 つの行が含まれます。FOREIGN KEY 制約の場合、テーブル情報は REFERENCES 句のテーブル用です。一意の制約または主キー制約の場合、このビューによって制約が属するテーブルが識別されます。このビューに、チェック制約と null 以外の制約は含まれません。

列名 説明
table_catalog character varying データベース名。
table_schema character varying 制約付きテーブルのスキーマ名。
table_name character varying なんらかの制約によって使用されるテーブルの名前。
constraint_catalog character varying データベース名。
constraint_schema character varying 制約を含むスキーマの名前。
constraint_name character varying 制約の名前。

database_options

このテーブルには、データベースに設定されているオプションが一覧表示されます。

列名 説明
catalog_name character varying データベース名。
schema_name character varying スキーマ名。PostgreSQL 言語データベースの場合、デフォルト値は「public」です。
option_name character varying データベース オプションの名前。 これは、DDL の「OPTIONS」句にある「key」の値です。
option_type character varying データベース オプションのデータ型。
option_value character varying データベース オプションの値。

index_columns

このテーブルには、インデックス内の列が一覧表示されます。

列名 説明
table_catalog character varying データベース名。
table_schema character varying インデックスを含むスキーマの名前。デフォルト値は「public」です。
table_name character varying インデックスに関連付けられているテーブルの名前。
index_name character varying インデックスの名前。「PRIMARY KEY」仕様のテーブルには、「PRIMARY_KEY」という名前で生成される疑似インデックス エントリがあります。
index_type character varying インデックスの種類。有効な値は、「PRIMARY_KEY」、「LOCAL」、「GLOBAL」です。
column_name character varying 列の名前。
ordinal_position BIGINT 1 の値で始まるインデックス(またはプライマリキー)の列の順序位置。この値は、キーのない列(たとえば、インデックスの INCLUDEで指定された列など)では NULL となります。
column_ordering character varying 列の並べ替え順序。この値はキー列では ASCDESC となり、キーのない列(たとえば、インデックスの STORING 句で指定された列など)では NULL となります。
is_nullable character varying 列が Nullable であるかどうかを示す文字列。SQL 標準に従い、この文字列はブール値ではなく、YESNO になります。
spanner_type character varying 列の DDL 互換型を保持する文字列。

indexes

このビューには、スキーマ内のインデックスが列挙されます。

列名 説明
table_catalog character varying データベース名。
table_schema character varying スキーマ名。デフォルト値は「public」です。
table_name character varying テーブルの名前。
index_name character varying インデックスの名前。PRIMARY KEY 句を使用して作成されたテーブルには、PRIMARY_KEY という名前で生成される疑似インデックス エントリがあり、主キーのフィールドを識別可能にします。
index_type character varying インデックスのデータ型。値には、PRIMARY_KEYLOCAL、または GLOBAL が含まれます。
parent_table_name character varying セカンダリ インデックスは、セカンダリ インデックスの作成に説明されているとおり、親テーブルにインターリーブされます。この列は親テーブルの名前を保持するか、インデックスがインターリーブされない場合は NULL となります。
is_unique character varying インデックス キーが固有のものでなければならないかどうかを示します。 SQL 標準に従い、この文字列はブール値ではなく、YESNO になります。
is_null_filtered character varying インデックスに NULL 値のエントリが含まれるかどうかを示します。 SQL 標準に従い、この文字列はブール値ではなく、YESNO になります。
index_state character varying インデックスの現在の状態。有効な値と状態は以下のとおりです。
  • NULL: インデックスの型は「PRIMARY_KEY」です
  • PREPARE: 新しいインデックスに空のテーブルを作成します。
  • WRITE_ONLY: 新しいインデックスにデータを埋め戻します
  • WRITE_ONLY_CLEANUP: 新しいインデックスのクリーンアップを行います
  • WRITE_ONLY_VALIDATE_UNIQUE: 新しインデックス データの固有性を確認します
  • READ_WRITE: 通常のインデックス オペレーション
spanner_is_managed character varying インデックスが Spanner によって管理されているかどうか。たとえば、外部キーのセカンダリ バックアップ インデックスは、Spanner によって管理されます。SQL 標準に従い、この文字列はブール値ではなく、YES または NO になります。

information_schema_catalog_name

このテーブルには、データベース名を含む 1 つの行と 1 つの列があります。

列名 説明
catalog_name character varying データベース名。

key_column_usage

このビューによって、一意キー制約、主キー制約、または外部キー制約によって参照される現在のデータベース内のすべての列が識別されます。CHECK 制約列については、check_constraints ビューをご覧ください。

列名 説明
constraint_catalog character varying データベース名。
constraint_schema character varying 制約のスキーマ名。デフォルト値は「public」です。
constraint_name character varying 制約の名前。
table_catalog character varying データベース名。
table_schema character varying 制約付きの列があるテーブルを含むスキーマの名前。デフォルト値は「public」です。
table_name character varying この制約によって制限される列を含むテーブルの名前。
column_name character varying 制約付きの列の名前。
ordinal_position BIGINT 制約のキー内での列の位置(1 値で始まり)。
position_in_unique_constraint BIGINT FOREIGN KEY の場合、一意の制約内での列の位置(1 値で始まり)。この列には、他の制約タイプの「NULL」値が含まれます。

referential_constraints

このビューには、FOREIGN KEY 制約ごとに関連する 1 つの行が表示されます。 参照しているテーブルへの書き込みアクセス権がある制約のみを確認できます。このビューでは、外部キーが制約の適用と参照アクションに使用する参照テーブルの PRIMARY KEY 制約と UNIQUE 制約も示されます。

列名 説明
constraint_catalog character varying データベース名。
constraint_schema character varying 外部キー制約を含むスキーマの名前。デフォルト値は「public」です。
constraint_name character varying 外部キー制約の名前。
unique_constraint_catalog character varying データベース名。
unique_constraint_schema character varying 外部キー制約が参照する一意または主キーの制約を含むスキーマの名前。
unique_constraint_name character varying 外部キー制約が参照する一意のキー制約または主キー制約の名前。
match_option character varying 外部キー制約で使用される match メソッド。値は常に NONE です。
update_rule character varying 外部キー制約の更新ルール。この値は常に NO ACTION です。
delete_rule character varying 外部キー制約の削除ルール。この値は常に NO ACTION です。
spanner_state character varying 外部キーの現在の状態。外部キーのバックアップ インデックスが作成され、バックフィルされるまで、Spanner は制約の適用を開始しません。インデックスの準備ができると、Spanner は既存のデータの検証中に新しいトランザクションの制約の適用を開始します。有効な値と状態は以下のとおりです。
  • BACKFILLING_INDEXES: インデックスはバックフィル中です。
  • VALIDATING_DATA: 既存のデータと新しい書き込みの検証中です。
  • WAITING_FOR_COMMIT: 外部キーの一括操作が正常に完了したか、操作は必要なかったものの外部キーがまだ保留中の状態です。
  • COMMITTED: スキーマの変更が commit されました。

schemata

information_schema.schemata ビューには、現在のデータベースのスキーマごとに 1 行が含まれます。スキーマには、情報スキーマと public というデフォルトのスキーマが含まれます。

列名 説明
catalog_name character varying データベース名。
schema_name character varying スキーマ名。デフォルト スキーマの場合は「public」に設定され、名前付きスキーマの場合は空以外になります。
schema_owner character varying スキーマのオーナー名。
default_character_set_catalog character varying 現在は使用されていません。
default_character_set_schema character varying 現在は使用されていません。
default_character_set_name character varying 現在は使用されていません。
sql_path character varying 現在は使用されていません。
effective_timestamp timestamp with timezone このスキーマ内のすべてのデータが有効になったタイムスタンプ。現在、これはデフォルトのスキーマにのみ使用されます。

spanner_statistics

このテーブルには、使用可能なクエリ オプティマイザーの統計情報パッケージが一覧表示されます。

列名 説明
catalog_name character varying データベース名。
schema_name character varying スキーマ名。デフォルトのスキーマ値は「public」です。
package_name character varying 統計情報パッケージの名前。
allow_gc character varying 統計情報パッケージがガベージ コレクションから除外されているかどうか。SQL 標準に従い、この文字列はブール値ではなく、YESNO になります。この属性は、ヒントまたはクライアント API で統計パッケージを参照する前に、NO に設定する必要があります。

table_constraints

このビューには、現在のユーザーがアクセスできるテーブルに属するすべての制約(SELECT 以外)が含まれます。

列名 説明
constraint_catalog character varying データベース名。
constraint_schema character varying 制約を含むスキーマの名前。
constraint_name character varying 制約の名前。
table_catalog character varying データベース名。
table_schema character varying 制約に関連付けられたテーブルを含むスキーマの名前。
table_name character varying テーブルの名前。
constraint_type character varying 制約の種類。有効な値は次のとおりです。
  • CHECK
  • FOREIGN KEY
  • PRIMARY KEY
  • UNIQUE
is_deferrable character varying 値は常に NO です。
initially_deferred character varying 値は常に NO です。
enforced character varying 制約が適用されるかどうか。制約が適用されると(特定の状態に達した後)、書き込み時とバックグラウンド整合性検証の両方で検証されます。SQL 標準に従い、この文字列はブール値ではなく、YESNO になります。

tables

このビューには、現在のデータベースのすべてのテーブルとビューが含まれます。

列名 説明
table_catalog character varying データベース名。
table_schema character varying テーブルまたはビューを含むスキーマの名前。
table_name character varying テーブルまたはビューの名前。
table_type character varying テーブルの種類。有効な値は「BASE TABLE」と「VIEW」です。
self_referencing_column_name character varying 現在は使用されていません。
reference_generation character varying 現在は使用されていません。
user_defined_type_catalog character varying 現在は使用されていません。
user_defined_type_schema character varying 現在は使用されていません。
user_defined_type_name character varying 現在は使用されていません。
is_insertable_into character varying 現在は使用されていません。
is_typed character varying 現在は使用されていません。
commit_action character varying 現在は使用されていません。
parent_table_name character varying このテーブルはインターリーブされた場合は親テーブルの名前、または NULL となります。
on_delete_action character varying インターリーブされたテーブルの場合は CASCADE または NO ACTION、それ以外の場合は NULL に設定されます。詳細については、TABLE ステートメントをご覧ください。
spanner_state character varying テーブルの現在の作成状態。
一括オペレーションが使用されている場合(たとえば、参照インデックスのバックフィルを必要とする外部キーでテーブルが作成された場合)は、作成中にテーブルが複数の状態を経由する可能性があります。有効な状態は次のとおりです。
  • ADDING_FOREIGN_KEY: テーブルの外部キーを追加しています
  • WAITING_FOR_COMMIT: スキーマの変更を確定しています
  • COMMITTED: テーブルを作成するためのスキーマの変更が commit されました。変更が commit されるまで、テーブルに書き込むことはできません。
  • NULL: ベーステーブルではないテーブルまたはビュー。
interleave_type character varying このテーブルとインターリーブされるテーブルの間に親子関係が存在するかどうか。有効な値は次のとおりです。
  • IN: 親子関係のない「INTERLEAVE IN」テーブル。このテーブルの行は、その親テーブルの行の有無にかかわらず存在できます。
  • IN PARENT: 親子関係を持つ「INTERLEAVE IN PARENT」テーブル。このテーブルの行には、親テーブルの行が存在する必要があります。
row_deletion_policy_expression character varying ROW DELETION POLICY を定義する式テキストを含む文字列。

views

このビューには、スキーマ内のビューに関する情報が列挙されます。

列名 説明
table_catalog character varying データベース名。
table_schema character varying スキーマ名。デフォルト値は「public」です。
table_name character varying ビューの名前。
view_definition character varying ビューを定義するクエリの SQL テキスト。
check_option character varying 現在は使用されていません。
is_updatable character varying 現在は使用されていません。
is_insertable_into character varying 現在は使用されていません。
is_trigger_updatable character varying 現在は使用されていません。
is_trigger_deletable character varying 現在は使用されていません。
is_trigger_insertable_into character varying 現在は使用されていません。

デフォルト スキーマの各テーブルに関する情報を返します。

SELECT
  t.table_catalog,
  t.table_name,
  t.parent_table_name
FROM
  information_schema.tables AS t
WHERE
  t.table_schema = 'public'
ORDER BY
  t.table_catalog,
  t.table_schema,
  t.table_name

PostgreSQL 言語データベースの information_schema 内にあるすべてのテーブルとビューの名前を返します。

SELECT table_name
FROM information_schema.tables
WHERE table_schema = "information_schema"

ユーザー テーブル my_table の列に関する情報を返します。

SELECT
  t.ordinal_position,
  t.column_name,
  t.data_type,
  t.spanner_type,
  t.is_nullable
FROM
  information_schema.columns AS t
WHERE
  t.table_schema = 'public'
  AND
  t.table_name = 'my_table'
ORDER BY
  t.ordinal_position

現在のデータベースのデフォルト スキーマの各インデックスに関する情報を返します。

SELECT
  t.table_name,
  t.index_name,
  t.parent_table_name
FROM
  information_schema.indexes AS t
WHERE
  t.table_schema = 'public'
  AND
  t.index_type != 'PRIMARY_KEY'
ORDER BY
  t.table_schema,
  t.table_name,
  t.index_name

デフォルト以外のオプションを使用するすべての列を返します。

SELECT
  t.table_name,
  t.column_name,
  t.option_type,
  t.option_value,
  t.option_name
FROM
  information_schema.column_options AS t
WHERE
  t.table_schema = 'public'
ORDER BY
  t.table_schema,
  t.table_name,
  t.column_name,
  t.option_name

現在のオプティマイザ関連のデータベース オプションを返します。

SELECT
  s.option_name,
  s.option_value
FROM
  information_schema.database_options s
WHERE
  s.schema_name=public''
  AND s.option_name IN ('optimizer_version',
    'optimizer_statistics_package')

使用可能なすべての統計情報パッケージを返します。

SELECT *
FROM information_schema.spanner_statistics;

次のステップ