PostgreSQL 中文参考文档
🌐 英文原版 官方 ↗

52.13. pg_constraint #

目录 pg_constraint 存储表上的检查、非空、 主键、唯一、外键和排他约束。 (列约束不会被特殊对待。每个列约束都等价于某个表约束。)

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

域上的检查约束也存储在这里。

Table 52.13. \1 字段列说明

Column Type

Description

oid oid

Row identifier

conname name

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

connamespace oid (references pg_namespace.oid)

包含此约束的命名空间的 OID

contype char

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

condeferrable bool

约束是否可以被延迟?

condeferred bool

约束默认是否被延迟?

conenforced bool

约束是否被强制执行?

convalidated bool

约束是否已被验证?

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 = 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 = 完全,p = 部分,s = 简单

conislocal bool

该约束是为此关系本地定义的。注意,一个约束可以同时是本地定义并被继承的。

coninhcount int2

该约束拥有的直接继承祖先的个数。 祖先数非零的约束不能被删除,也不能被重命名。

connoinherit bool

该约束是针对此关系在本地定义的。它是一个不可继承的约束。

conperiod bool

该约束是用 WITHOUT OVERLAPS (对于主键和唯一约束)或 PERIOD (对于外键)定义的。

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 NULL 或 SET DEFAULT 删除动作的外键,则是将被更新的列。 如果为空,则所有引用列都将被更新。

conexclop oid[] (references pg_operator.oid)

如果是排他约束或 WITHOUT OVERLAPS 主键/唯一约束,则是每列排他操作符的列表。

conbin pg_node_tree

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


对于排他约束,conkey 只对简单列引用的约束元素有用。对于其他情况, conkey 中会出现零, 必须查询相关的索引才能找到受约束的表达式。 (因此 conkey 的内容与该索引的 pg_index.indkey 相同。)

Note

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