51.13. pg_constraint

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

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

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

表 51.13. pg_constraint

NameTypeReferencesDescription
oidoid 行标识符(隐藏属性;必须显式选择)
connamename 约束名称(不一定是唯一的!)
connamespaceoidpg_namespace.oid包含此约束的名称空间的 OID
contypechar c =检查约束,f =外键约束,p =主键约束,u =唯一约束,t =约束触发器,x =排除约束
condeferrablebool 约束是否可以延期?
condeferredbool 默认情况下是否推迟约束?
convalidatedbool 约束条件是否已得到验证?当前,对于外键和 CHECK 约束只能是 false
conrelidoidpg_class.oid该约束所在的表;如果不是表约束,则为 0
contypidoidpg_type.oid此约束所在的域;如果不是域约束,则为 0
conindidoidpg_class.oid支持此约束的索引,如果它是唯一,主键,外键或排除约束;否则 0
confrelidoidpg_class.oid如果是外键,则引用表;否则 0
confupdtypechar 外键更新操作代码:a =无操作,r =限制,c =级联,n =设置为空,d =设置为默认
confdeltypechar 外键删除操作代码:a =无操作,r =限制,c =级联,n =设置为空,d =设置为默认
confmatchtypechar 外键匹配类型:f =完全,p =部分,s =简单
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 如果是检查约束,则为表达式的内部表示形式
consrctext 如果是检查约束,则为表达式的可读形式

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

Note

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

Note

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