53.13. pg_constraint

В каталоге pg_constraint хранятся ограничения-проверки, ограничения-исключения, а также ограничения первичного ключа, уникальности и внешних ключей, определённые для таблиц. (Ограничения столбцов описываются как и все остальные. Любое ограничение столбца равнозначно некоторому ограничению таблицы.) Ограничения на NULL представляются не здесь, а в каталоге pg_attribute.

Для пользовательских триггеров ограничений (создаваемых командой CREATE CONSTRAINT TRIGGER) в этой таблице также создаётся запись.

Здесь также хранятся ограничения доменов.

Таблица 53.13. Столбцы pg_constraint

NameТипСсылкиОписание
oidoid Идентификатор строки
connamename Имя ограничения (не обязательно уникальное!)
connamespaceoidpg_namespace.oidOID пространства имён, содержащего это ограничение
contypechar c = ограничение-проверка (check), f = внешний ключ (foreign key), p = первичный ключ (primary key), u = ограничение уникальности (unique), t = триггер ограничения (trigger), x = ограничение-исключение (exclusion)
condeferrablebool Является ли ограничение откладываемым?
condeferredbool Является ли ограничение отложенным по умолчанию?
convalidatedbool Было ли ограничение проверено? В настоящее время значение false возможно только для внешних ключей и ограничений CHECK
conrelidoidpg_class.oidТаблица, для которой установлено это ограничение; 0, если это не ограничение таблицы
contypidoidpg_type.oidДомен, к которому относится это ограничение; 0, если это не ограничение домена
conindidoidpg_class.oidИндекс, поддерживающий это ограничение, если это ограничение уникальности, первичного или внешнего ключа, либо ограничение-исключение; в противном случае — 0
conparentidoidpg_constraint.oidСоответствующее ограничение в родительской секционированной таблице, если это ограничение в секции; иначе 0
confrelidoidpg_class.oidЕсли это внешний ключ, таблица, на которую он ссылается; иначе 0
confupdtypechar Код действия при изменении внешнего ключа: a = нет действия, r = ограничить (restrict), c = каскадное действие (cascade), n = присвоить NULL, d = поведение по умолчанию
confdeltypechar Код действия при удалении внешнего ключа: a = нет действия, r = ограничить (restrict), c = каскадное действие (cascade), n = присвоить NULL, d = поведение по умолчанию
confmatchtypechar Тип сопоставления внешнего ключа: f = полное (full), p = частичное (partial), s = простое (simple)
conislocalbool Ограничение определено локально в данном отношении. Заметьте, что ограничение может быть определено локально и при этом наследоваться.
coninhcountint4 Число прямых предков этого ограничения. Ограничение с ненулевым числом предков нельзя удалить или переименовать.
connoinheritbool Ограничение определено локально для данного отношения и является ненаследуемым.
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 Для ограничения-проверки — внутреннее представление выражения. (Чтобы извлечь определение ограничения-проверки, рекомендуется использовать pg_get_constraintdef().)

В случае с ограничением-исключением значение conkey полезно только для элементов ограничений, представляющих простые ссылки на столбцы. Для других случаев в conkey задаётся ноль, и чтобы получить выражение, определяющее ограничение, надо обратиться к соответствующему индексу. (Таким образом, поле conkey имеет то же содержимое, что и pg_index.indkey для индекса.)

Примечание

Поле pg_class.relchecks должно согласовываться с числом ограничений-проверок, описанных в данной таблице для каждого отношения.

53.13. 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.

User-defined constraint triggers (created with CREATE CONSTRAINT TRIGGER) also give rise to an entry in this table.

Check constraints on domains are stored here, too.

Table 53.13. pg_constraint Columns

NameTypeReferencesDescription
oidoid Row identifier
connamename Constraint name (not necessarily unique!)
connamespaceoidpg_namespace.oid The OID of the namespace that contains this constraint
contypechar c = check constraint, f = foreign key constraint, p = primary key constraint, u = unique constraint, t = constraint trigger, x = exclusion constraint
condeferrablebool Is the constraint deferrable?
condeferredbool Is the constraint deferred by default?
convalidatedbool Has the constraint been validated? Currently, can only be false for foreign keys and CHECK constraints
conrelidoidpg_class.oidThe table this constraint is on; 0 if not a table constraint
contypidoidpg_type.oidThe domain this constraint is on; 0 if not a domain constraint
conindidoidpg_class.oidThe index supporting this constraint, if it's a unique, primary key, foreign key, or exclusion constraint; else 0
conparentidoidpg_constraint.oidThe corresponding constraint in the parent partitioned table, if this is a constraint in a partition; else 0
confrelidoidpg_class.oidIf a foreign key, the referenced table; else 0
confupdtypechar Foreign key update action code: a = no action, r = restrict, c = cascade, n = set null, d = set default
confdeltypechar Foreign key deletion action code: a = no action, r = restrict, c = cascade, n = set null, d = set default
confmatchtypechar Foreign key match type: f = full, p = partial, s = simple
conislocalbool  This constraint is defined locally for the relation. Note that a constraint can be locally defined and inherited simultaneously.
coninhcountint4  The number of direct inheritance ancestors this constraint has. A constraint with a nonzero number of ancestors cannot be dropped nor renamed.
connoinheritbool  This constraint is defined locally for the relation. It is a non-inheritable constraint.
conkeyint2[]pg_attribute.attnumIf a table constraint (including foreign keys, but not constraint triggers), list of the constrained columns
confkeyint2[]pg_attribute.attnumIf a foreign key, list of the referenced columns
conpfeqopoid[]pg_operator.oidIf a foreign key, list of the equality operators for PK = FK comparisons
conppeqopoid[]pg_operator.oidIf a foreign key, list of the equality operators for PK = PK comparisons
conffeqopoid[]pg_operator.oidIf a foreign key, list of the equality operators for FK = FK comparisons
conexclopoid[]pg_operator.oidIf an exclusion constraint, list of the per-column exclusion operators
conbinpg_node_tree If 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.)

Note

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

FAQ