32.9. columns

columnsビューには、データベース内の全てのテーブル列(もしくはビューの列)についての情報が含まれます。 システム列(oidなど)は含まれません。 現在のユーザが(所有者である、権限を持っているなどの方法で)アクセスできる列のみが示されます。

表 32-7. columns の列

名前データ型説明
table_catalogsql_identifierそのテーブルを持つデータベースの名前です。(常に現在のデータベースです。)
table_schemasql_identifierそのテーブルを持つスキーマの名前です。
table_namesql_identifierテーブルの名前です。
column_namesql_identifier列の名前です。
ordinal_positioncardinal_numberテーブル内の列の位置(1から始まる序数)です。
column_defaultcharacter_data列のデフォルト式です。 (現在のユーザがその列を持つテーブルの所有者でなければ、ヌルです。)
is_nullablecharacter_data列がNULLを持つことができる場合はYES 、NULLを持つことができなければNO です。 非NULL制約は、列にNULLを持たせないようにする方法の一つですが、その他にも存在します。
data_typecharacter_data組み込み型の場合、列のデータ型、配列の場合、ARRAY(この場合はelement_typesビューを参照してください。)、さもなくば、USER-DEFINED(この場合、型はudt_nameと関連する列で識別されます。)です。 列がドメインに基づくものであれば、その列はドメインの背後にある型を示します。 (そして、ドメインはdomain_nameと関連する列によって識別されます。)
character_maximum_lengthcardinal_numberdata_typeが、文字、もしくは、ビット文字列型を表す場合、宣言された最大の長さです。その他の型や最大長が宣言されていない場合はNULLになります。
character_octet_lengthcardinal_numberdata_typeが文字型を示す場合、オクテット(バイト)単位の最大長です。 (これはおそらくPostgreSQLユーザは関心を持ちません。) 他の全てのデータ型ではNULLです。
numeric_precisioncardinal_numberdata_typeが数値型を示す場合、ここには、その列の型の(宣言された、もしくは、暗黙的な)精度が含まれます。 この精度は有意な桁数を示します。 numeric_precision_radix列の指定に従い、10進数(10を基)、もしくは、2進数(2を基)で表現されます。 この列は、他の全ての型ではNULLです。
numeric_precision_radixcardinal_numberdata_type が数値型を示す場合、この列は、numeric_precisionnumeric_scale の表現の基とする数を示します。 2もしくは10を取ります。 この列は、他の全ての型ではNULLです。
numeric_scalecardinal_numberdata_type が高精度数値型を示す場合、 ここには、その列の型の(宣言された、あるいは、暗黙的な)位取りが含まれます。 位取りとは、小数点より右側の有意な桁数です。 numeric_precision_radix列の指定に従い、10進数(10を基)、もしくは、2進数(2を基)で表現されます。 この列は、他の全ての型ではNULLです。
datetime_precisioncardinal_numberdata_type が日付、時刻、間隔型を示す場合、宣言された精度です。 他の全ての型の場合や、精度が宣言されていない場合はNULLです。
interval_typecharacter_data未実装です。
interval_precisioncharacter_data未実装です。
character_set_catalogsql_identifierPostgreSQLで利用できない機能に適用されるものです。
character_set_schemasql_identifierPostgreSQLで利用できない機能に適用されるものです。
character_set_namesql_identifierPostgreSQLで利用できない機能に適用されるものです。
collation_catalogsql_identifierPostgreSQLで利用できない機能に適用されるものです。
collation_schemasql_identifierPostgreSQLで利用できない機能に適用されるものです。
collation_namesql_identifierPostgreSQLで利用できない機能に適用されるものです。
domain_catalogsql_identifier列がドメイン型の場合、そのドメインを定義したデータベースの名前です。 (常に現在のデータベースです。) さもなくば、NULLです。
domain_schemasql_identifier列がドメイン型の場合、そのドメインを定義したスキーマの名前です。 さもなくば、NULLです。
domain_namesql_identifier列がドメイン型の場合、そのドメインの名前です。 さもなくば、NULLです。
udt_catalogsql_identifier列データ型(もし適切ならば背後にあるドメインの型)を定義したデータベースの名前です。 (常に現在のデータベースです。)
udt_schemasql_identifier列データ型(もし適切ならば背後にあるドメインの型)を定義したスキーマの名前です。
udt_namesql_identifier列データ型(もし適切ならば背後にあるドメインの型)の名前です。
scope_catalogsql_identifierPostgreSQLで利用できない機能に適用されるものです。
scope_schemasql_identifierPostgreSQLで利用できない機能に適用されるものです。
scope_namesql_identifierPostgreSQLで利用できない機能に適用されるものです。
maximum_cardinalitycardinal_number常にNULLです。 PostgreSQLでは常に配列の最大次数に制限がないからです。
dtd_identifiersql_identifier列のデータ型記述子の、テーブルに属するデータ型記述子内で一意な識別子です。 この識別子のインスタンスを結合する時に、主に有用です。 (識別子の書式仕様は定義されておらず、今後のバージョンで同一性を維持する保証もありません。)
is_self_referencingcharacter_dataPostgreSQLで利用できない機能に適用されるものです。

データ型は、複数の方法でSQLにより定義でき、さらに、PostgreSQL にはデータ型定義に別の方法も追加されていますので、情報スキーマにおけるデータ型表現は多少難しくなっています。 data_type 列は、列の背後にある組み込み型を識別できるようになっていなければなりません。 PostgreSQLでは、型がpg_catalogシステムカタログスキーマで定義されていることを意味します。 よく知られた組み込み型を特別に扱うことができるアプリケーション(例えば、数値型を異なる書式にする、精度列内のデータを使用する)の場合、この列が有用な場合があります。 udt_nameudt_schemaudt_catalog列は、たとえドメインに基づいた列であっても、常に列の背後にあるデータ型を識別します。 (PostgreSQLは、組み込み型をユーザ定義型と同様に扱いますので、ここには組み込み型も現われます。これは標準SQLからの拡張です。) アプリケーションが型に従って異なる処理を行う場合、これらの列を使用しなければなりません。 このような場合、本当はドメインに基づいている列なのかどうかが関係ないからです。 列がドメインに基づく場合、ドメインの識別子はdomain_namedomain_schemadomain_catalog列に保持されます。 関連するデータ型と列の組合せを作りたい場合や、ドメインを別の型として扱いたい場合は、coalesce(domain_name, udt_name)などとすることができます。