pg_constraintカタログは検査制約、主キー制約、一意性制約、外部キー制約をテーブル上に格納します(列制約は特別扱いされていません。全ての列制約はテーブル制約と同等です)。非NULL制約はpg_attributeカタログで示されます。
ドメイン上の検査制約もここに格納されます。
表 44-12. pg_constraintの列
名前 | 型 | 参照先 | 説明 |
---|---|---|---|
conname | name | 制約名(一意である必要はありません)。 | |
connamespace | oid | pg_namespace.oid | この制約を含む名前空間のOID。 |
contype | char | c = 検査制約、 f = 外部キー制約、 p = 主キー制約、 u = 一意性制約 | |
condeferrable | bool | 制約はDEFERRED可能(トランザクション終了まで制約のチェックを行わない)かどうか? | |
condeferred | bool | 制約はデフォルトでdeferredかどうか? | |
conrelid | oid | pg_class.oid | この制約が存在しているテーブルです。テーブル制約でなければ0です。 |
contypid | oid | pg_type.oid | この制約が存在しているドメインです。ドメイン制約でなければ0です。 |
confrelid | oid | pg_class.oid | 外部キーであれば、参照されるテーブルです。そうでなければ0です。 |
confupdtype | char | 外部キー更新アクションコード: a = no action, r = restrict, c = cascade, n = set null, d = set default | |
confdeltype | char | 外部キー削除アクションコード: a = no action, r = restrict, c = cascade, n = set null, d = set default | |
confmatchtype | char | 外部キーの一致型: f = full, p = partial, u = simple (指定なし) | |
conislocal | bool | この制約は関係内でローカルに定義されています。制約はローカルに定義されていて同時に継承されます。 | |
coninhcount | int4 | この制約がもつ直系の先祖の数。先祖の数がゼロではない制約は削除や改名はできません。 | |
conkey | int2[] | pg_attribute.attnum | テーブル制約(外部キーを含みます)であれば、その制約によって制約される列のリスト |
confkey | int2[] | pg_attribute.attnum | 外部キーであれば、参照される列のリスト |
conpfeqop | oid[] | pg_operator.oid | 外部キーであれば、PK = FKの比較のための同値演算子のリスト |
conppeqop | oid[] | pg_operator.oid | 外部キーであれば、PK = PKの比較のための同値演算子のリスト |
conffeqop | oid[] | pg_operator.oid | 外部キーであれば、FK = FKの比較のための同値演算子のリスト |
conbin | text | 検査制約であれば、式の内部表現形式 | |
consrc | text | 検査制約であれば、人間が見てわかる形式の式 |
注意: consrcは参照されているオブジェクトが変更されても更新されません。例えば列名の変更を追跡しません。このフィールドに信頼を寄せるよりも、検査制約を引き出すのには
pg_get_constraintdef()
を使うのが最善です。
注意: pg_class.relchecksはそれぞれのリレーションに対してこのテーブルで検出された検査制約のエントリの数と一致しなければなりません。