
# PG_CONSTRAINT
PG_CONSTRAINT系统表存储表上的检查约束、主键、唯一约束和外键约束。
表1PG_CONSTRAINT字段 
| 名称            | 类型           | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
|:---|:---|:---|
| conname       | name         | 约束名称（不一定是唯一的）。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| connamespace  | oid          | 包含约束的命名空间的OID。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| contype       | "char"       | - c = 检查约束  - f = 外键约束  - p = 主键约束  - u = 唯一约束  - t = 触发器约束                                                                                                                 |
| condeferrable | boolean      | 该约束是否可以推迟。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| condeferred   | boolean      | 缺省时该约束是否可以推迟。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| convalidated  | boolean      | 约束是否有效。目前，只有外键和CHECK约束可将其设置为FALSE。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| conrelid      | oid          | 该约束所在的表；如果不是表约束则为0。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| contypid      | oid          | 该约束所在的域；如果不是一个域约束则为0。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| conindid      | oid          | 与约束关联的索引ID。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| confrelid     | oid          | 如果是外键，则为参考的表；否则为0。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| confupdtype   | "char"       | 外键更新动作代码。 - a = 没动作  - r = 限制  - c = 级联  - n =设置为null  - d =设置为缺省   |
| confdeltype   | "char"       | 外键删除动作代码。 - a = 没动作  - r = 限制  - c = 级联  - n =设置为null  - d =设置为缺省   |
| confmatchtype | "char"       | 外键匹配类型。 - f = 全部  - p = 部分  - u = 简单（未指定）                                                                                                                                                                                                                                                                                                   |
| conislocal    | boolean      | 是否是为关系创建的本地约束。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| coninhcount   | integer      | 约束直接继承父表的数目。继承父表数非零时，不能删除或重命名该约束。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| connoinherit  | boolean      | 是否可以被继承。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    |
| consoft       | boolean      | 是否为信息约束(Informational Constraint)。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| conopt        | boolean      | 是否使用信息约束优化执行计划。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| conkey        | smallint\[\] | 如果是表约束，则是约束控制的字段列表。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| confkey       | smallint\[\] | 如果是一个外键，则是参考的字段的列表。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| conpfeqop     | oid\[\]      | 如果是一个外键，是做PK=FK比较的相等操作符ID的列表。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| conppeqop     | oid\[\]      | 如果是一个外键，是做PK=PK比较的相等操作符ID的列表。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| conffeqop     | oid\[\]      | 如果是一个外键，是做FK=FK比较的相等操作符ID的列表。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| conexclop     | oid\[\]      | 如果是一个排他约束，是列的排他操作符ID列表。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| conbin        | pg_node_tree | 如果是检查约束，则是其表达式的内部形式。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| consrc        | text         | 如果是检查约束，则是表达式的人类可读形式。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
   
![](https://support.huaweicloud.com/devg-dws/public_sys-resources/notice_3.0-zh-cn.png)
- 当被引用的对象改变时，consrc不能被更新。例如，它不会跟踪字段的重命名。建议还是使用pg_get_constraintdef()来抽取一个检查约束的定义，而不是依赖这个字段。
- pg_class.relchecks需要和每个关系在此目录中的检查约束数量保持一致。
 
#### 应用示例
查询指定表是否有主键。
```
CREATE TABLE t1
(    
    C_CUSTKEY    BIGINT       ,
    C_NAME       VARCHAR(25)  ,
    C_ADDRESS    VARCHAR(40)  ,
    C_NATIONKEY  INT          ,
    C_PHONE      CHAR(15)     ,
    C_ACCTBAL    DECIMAL(15,2), 
    CONSTRAINT C_CUSTKEY_KEY PRIMARY KEY(C_CUSTKEY,C_NAME)
)
DISTRIBUTE BY HASH(C_CUSTKEY,C_NAME);
SELECT conname FROM pg_constraint WHERE conrelid = 't1'::regclass AND contype = 'p';
    conname
---------------
 c_custkey_key
(1 row)
```
