51.13. pg_constraint

目录pg_constraint在表上存储检查,主键,唯一键,外键和排除约束。 (没有对列约束进行特殊处理.每个列约束都等同于某些表约束.)非空约束在pg_attribute目录中表示,此处不表示。

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

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

表 51.13. pg_constraint

Name Type References Description
oid oid 行标识符(隐藏属性;必须显式选择)
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 pg_class.oid 该约束所在的表;如果不是表约束,则为 0
contypid oid pg_type.oid 此约束所在的域;如果不是域约束,则为 0
conindid oid pg_class.oid 支持此约束的索引,如果它是唯一,主键,外键或排除约束;否则 0
confrelid oid pg_class.oid 如果是外键,则引用表;否则 0
confupdtype char 外键更新操作代码:a =无操作,r =限制,c =级联,n =设置为空,d =设置为默认
confdeltype char 外键删除操作代码:a =无操作,r =限制,c =级联,n =设置为空,d =设置为默认
confmatchtype char 外键匹配类型:f =完全,p =部分,s =简单
conislocal bool 此约束是为关系本地定义的。注意,约束可以在本地定义并同时继承。
coninhcount int4 此约束具有的直接继承祖先的数量。祖先数不为零的约束不能被删除或重命名。
connoinherit bool 此约束是为关系本地定义的。这是一个不可继承的约束。
conkey int2[] pg_attribute.attnum 如果表约束(包括外键,但不包括约束触发器),则为约束列的列表
confkey int2[] pg_attribute.attnum 如果是外键,则引用列的列表
conpfeqop oid[] pg_operator.oid 如果是外键,则用于 PK = FK 比较的相等运算符列表
conppeqop oid[] pg_operator.oid 如果是外键,则用于 PK = PK 比较的相等运算符列表
conffeqop oid[] pg_operator.oid 如果是外键,则用于 FK 的相等运算符列表= FK 比较
conexclop oid[] pg_operator.oid 如果排除约束,则按列排除运算符
conbin pg_node_tree 如果是检查约束,则为表达式的内部表示形式
consrc text 如果是检查约束,则为表达式的可读形式

在排除约束的情况下,conkey仅对作为简单列引用的约束元素有用。对于其他情况,在conkey中出现零,必须查阅关联的索引才能发现受约束的表达式。 (因此,conkeypg_index.indkey具有相同的索引内容.)

Note

consrc在引用的对象发生更改时不会更新;例如,它不会跟踪列的重命名。最好不要使用pg_get_constraintdef()来提取检查约束的定义,而不是依赖此字段。

Note

pg_class.relchecks必须同意该表中每个关系的检查约束条目的数量。

上一章 首页 下一章