The catalog pg_constraint
stores check, primary key, unique, and foreign
key constraints on tables. (Column constraints are not treated
specially. Every column constraint is equivalent to some table
constraint.) Not-null constraints are represented in the
pg_attribute
catalog.
Check constraints on domains are stored here, too.
Table 43.13. pg_constraint
Columns
Name | Type | References | Description |
---|---|---|---|
conname |
name |
Constraint name (not necessarily unique!) | |
connamespace |
oid |
|
The OID of the namespace that contains this constraint |
contype |
char |
c = check constraint,
f = foreign key constraint,
p = primary key constraint,
u = unique constraint
|
|
condeferrable |
bool |
Is the constraint deferrable? | |
condeferred |
bool |
Is the constraint deferred by default? | |
conrelid |
oid |
|
The table this constraint is on; 0 if not a table constraint |
contypid |
oid |
|
The domain this constraint is on; 0 if not a domain constraint |
confrelid |
oid |
|
If a foreign key, the referenced table; else 0 |
confupdtype |
char |
Foreign key update action code | |
confdeltype |
char |
Foreign key deletion action code | |
confmatchtype |
char |
Foreign key match type | |
conkey |
int2[] |
|
If a table constraint, list of columns which the constraint constrains |
confkey |
int2[] |
|
If a foreign key, list of the referenced columns |
conbin |
text |
If a check constraint, an internal representation of the expression | |
consrc |
text |
If a check constraint, a human-readable representation of the expression |
consrc
is not updated when referenced objects
change; for example, it won't track renaming of columns. Rather than
relying on this field, it's best to use pg_get_constraintdef()
to extract the definition of a check constraint.
pg_class.relchecks
needs to agree with the
number of check-constraint entries found in this table for the
given relation.