45.12. pg_constraint

pg_constraintカタログはテーブル上の検査制約、プライマリキー制約、一意性制約、外部キー制約、排他制約を格納します (列制約は特別扱いされていません。 全ての列制約は何らかのテーブル制約と同等です。) 非NULL制約はここではなく、pg_attributeカタログで示されます。

(CREATE CONSTRAINT TRIGGERで作成される)ユーザ定義の制約トリガもこのテーブルの項目の元になります。

ドメイン上の検査制約もここに格納されます。

表 45-12. pg_constraintの列

名前参照先説明
connamename 制約名(一意である必要はありません)。
connamespaceoidpg_namespace.oid この制約を含む名前空間のOID。
contypechar  c = 検査制約、 f = 外部キー制約、 p = プライマリキー制約、 u = 一意性制約、 t = 制約トリガ, x = 排他制約
condeferrablebool 制約は遅延可能かどうか?
condeferredbool 制約はデフォルトで遅延可能かどうか?
convalidatedbool 制約が検証されているか?現時点では外部キーの場合のみ偽になる可能性があります。
conrelidoidpg_class.oidこの制約が存在しているテーブルです。テーブル制約でなければ0です。
contypidoidpg_type.oidこの制約が存在しているドメインです。ドメイン制約でなければ0です。
conindidoidpg_class.oid一意性制約、プライマリキー制約、外部キー制約、排他制約の場合、この制約をサポートするインデックス。 さもなくばゼロ。
confrelidoidpg_class.oid外部キーであれば、参照されるテーブルです。そうでなければ0です。
confupdtypechar 外部キー更新アクションコード: a = no action, r = restrict, c = cascade, n = set null, d = set default
confdeltypechar 外部キー削除アクションコード: a = no action, r = restrict, c = cascade, n = set null, d = set default
confmatchtypechar 外部キーの一致型: f = full, p = partial, u = simple (指定なし)
conislocalbool  この制約はリレーションでローカルに定義されています。制約はローカルに定義されていて同時に継承されます。
coninhcountint4 この制約がもつ直系の先祖の数。 先祖の数がゼロではない制約は削除や改名はできません。
conkeyint2[]pg_attribute.attnumテーブル制約(外部キーを含みますが制約トリガは含みません)であれば、その制約によって制約される列のリスト
confkeyint2[]pg_attribute.attnum外部キーであれば、参照される列のリスト
conpfeqopoid[]pg_operator.oid外部キーであれば、PK = FKの比較のための同値演算子のリスト
conppeqopoid[]pg_operator.oid外部キーであれば、PK = PKの比較のための同値演算子のリスト
conffeqopoid[]pg_operator.oid外部キーであれば、FK = FKの比較のための同値演算子のリスト
conexclopoid[]pg_operator.oid排他制約の場合、列単位の排他演算子のリスト。
conbinpg_node_tree 検査制約であれば、式の内部表現形式
consrctext 検査制約であれば、人間が見てわかる形式の式

排他制約の場合、単純な列参照である制約要素でのみconkeyが有用です。 その他の場合、conkeyはゼロであり、関連するインデックスは制約される式を調査して見つけなければなりません。 (したがってインデックスではconkeypg_index.indkeyの内容と同じものを持ちます。)

注意: consrcは参照されているオブジェクトが変更されても更新されません。 例えば列名の変更を追跡しません。 検査制約を引き出すためには、このフィールドに信頼を寄せるよりもpg_get_constraintdef()を使うのが最善です。

注意: pg_class.relchecksはそれぞれのリレーションに対してこのテーブルで検出された検査制約の項目数と一致しなければなりません。