DocsSql ReferenceInternalsCatalogsCatalog Pg Constraint

pg_constraint

The catalog pg_constraint stores check, primary key, unique, foreign key, and exclusion 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, not here.

Check constraints on domains are stored here, too.

pg_constraint Columns

Column TypeDescription
oid oidRow identifier
conname nameConstraint name (not necessarily unique!)
connamespace oid (references pg_namespace.oid)The OID of the namespace that contains this constraint
contype charc = check constraint, f = foreign key constraint, p = primary key constraint, u = unique constraint, t = constraint trigger, x = exclusion constraint
condeferrable boolIs the constraint deferrable?
condeferred boolIs the constraint deferred by default?
convalidated boolHas the constraint been validated? Currently, can be false only for foreign keys and CHECK constraints
conrelid oid (references pg_class.oid)The table this constraint is on; zero if not a table constraint
contypid oid (references pg_type.oid)The domain this constraint is on; zero if not a domain constraint
conindid oid (references pg_class.oid)The index supporting this constraint, if it’s a unique, primary key, foreign key, or exclusion constraint; else zero
conparentid oid (references pg_constraint.oid)The corresponding constraint of the parent partitioned table, if this is a constraint on a partition; else zero
confrelid oid (references pg_class.oid)If a foreign key, the referenced table; else zero
confupdtype charForeign key update action code: a = no action, r = restrict, c = cascade, n = set null, d = set default
confdeltype charForeign key deletion action code: a = no action, r = restrict, c = cascade, n = set null, d = set default
confmatchtype charForeign key match type: f = full, p = partial, s = simple
conislocal boolThis constraint is defined locally for the relation. Note that a constraint can be locally defined and inherited simultaneously.
coninhcount int4The number of direct inheritance ancestors this constraint has. A constraint with a nonzero number of ancestors cannot be dropped nor renamed.
connoinherit boolThis constraint is defined locally for the relation. It is a non-inheritable constraint.
conkey int2[] (references pg_attribute.attnum)If a table constraint (including foreign keys, but not constraint triggers), list of the constrained columns
confkey int2[] (references pg_attribute.attnum)If a foreign key, list of the referenced columns
conpfeqop oid[] (references pg_operator.oid)If a foreign key, list of the equality operators for PK = FK comparisons
conppeqop oid[] (references pg_operator.oid)If a foreign key, list of the equality operators for PK = PK comparisons
conffeqop oid[] (references pg_operator.oid)If a foreign key, list of the equality operators for FK = FK comparisons
conexclop oid[] (references pg_operator.oid)If an exclusion constraint, list of the per-column exclusion operators
conbin pg_node_treeIf a check constraint, an internal representation of the expression. (It’s recommended to use pg_get_constraintdef() to extract the definition of a check constraint.)

In the case of an exclusion constraint, conkey is only useful for constraint elements that are simple column references. For other cases, a zero appears in conkey and the associated index must be consulted to discover the expression that is constrained. (conkey thus has the same contents as pg_index.indkey for the index.)

pg_class.relchecks needs to agree with the number of check-constraint entries found in this table for each relation.