On this page
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
中出现零,必须查阅关联的索引才能发现受约束的表达式。 (因此,conkey
与pg_index
.indkey
具有相同的索引内容.)
Note
consrc
在引用的对象发生更改时不会更新;例如,它不会跟踪列的重命名。最好不要使用pg_get_constraintdef()
来提取检查约束的定义,而不是依赖此字段。
Note
pg_class.relchecks
必须同意该表中每个关系的检查约束条目的数量。