Postgresql 中文操作指南

53.13. pg_constraint #

目录 pg_constraint 存储对表上的检查、主键、唯一键、外键和排他约束。(列约束没有被特殊处理。每个列约束等同于某个表约束。)非空约束表示为 pg_attribute 目录,不在此处。

用户定义的约束触发器(使用 CREATE CONSTRAINT TRIGGER 创建)也会导致在此表中生成一个条目。

此处也存储了域上的检查约束。

Table 53.13. pg_constraint Columns

Column Type

Description

oid oid

Row identifier

conname name 约束名称(不一定唯一!)

connamespace oid (引用 pg_namespace . oid )包含此约束的名称空间的 OID

contype char c = 检查约束, f = 外键约束, p = 主键约束, u = 唯一约束, t = 约束触发器, x = 排他约束

condeferrable bool 约束是否可推迟?

condeferred bool 默认情况下约束会被延迟吗?

convalidated bool 该约束已被验证吗?目前,只有外键和 CHECK 约束可以为 false

conrelid oid (references pg_class . oid )此约束所在的表;如果不是表约束,则为零

contypid oid (references pg_type . oid )此约束所在的域;如果不是域约束,则为零

conindid oid (references pg_class . oid )如果该约束是唯一约束、主键、外键或排除约束,则支持此约束的索引;否则为零

conparentid oid (references pg_constraint . oid )如果该约束是对分区进行约束,则这是父级分区表的对应约束;否则为零

confrelid oid (references pg_class . oid )如果是外键,则引用表;否则为零

confupdtype char 外键更新操作代码: a = 不操作, r = 限制, c = 级联, n = 设置为空, d = 设置为默认值

confdeltype char 外键删除操作代码: a = 不操作, r = 限制, c = 级联, n = 设置为空, d = 设置为默认值

confmatchtype char 外键匹配类型: f = 完全, p = 部分, s = 简单

conislocal bool 此约束是针对关系局部定义的。请注意,约束可以同时是局部定义的和继承的。

coninhcount int2 此约束在关系中具有直接继承祖先的数量。具有非零数量祖先的约束不能被删除或重命名。

connoinherit bool 此约束是针对关系局部定义的。它是一个不可继承的约束。

conkey int2[] (references pg_attribute . attnum )如果是一个表约束(包括外键但不含约束触发器),受约束的列的列表

confkey int2[] (references pg_attribute . attnum )如果是一个外键,引用的列的列表

conpfeqop oid[] (references pg_operator . oid )如果是一个外键,PK = FK 比较中的等式运算符的列表

conppeqop oid[] (references pg_operator . oid )如果是一个外键,PK = PK 比较中的等式运算符的列表

conffeqop oid[] (references pg_operator . oid )如果是一个外键,FK = FK 比较中的等式运算符的列表

confdelsetcols int2[] (references pg_attribute . attnum )如果一个外键具有 SET NULLSET DEFAULT 删除操作,则将更新的列。如果为 null,则会更新所有引用列。

conexclop oid[] (参考文献 pg_operator . oid )如果是一个排除约束,则为每列排除运算符列表

conbin pg_node_tree 如果是一个检查约束,则该表达式的内部表示。(建议使用 pg_get_constraintdef() 来提取检查约束的定义。)

对于排除约束, conkey 只对作为简单列引用的约束元素有用。对于其他情况, conkey 中会出现一个零并且必须参考关联索引才能发现受约束的表达式。(因此 conkey 与索引的 pg_index . indkey 中的内容相同。)

Note

pg_class.relchecks 需要与为此表中的每个关系找到的检查约束条目数一致。