You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用ESQL/C显示PostgreSQL中已设置的表约束?

ESQL/C输出PostgreSQL自定义CHECK约束实现方案

实现逻辑

你要查询的check_name_of_det约束存储在PostgreSQL的系统表中,可以通过查询系统表获取约束定义后输出,也可以直接打印固定约束内容,两种实现方式如下:

  • 动态查询获取约束并输出:
    使用PostgreSQL内置函数pg_get_constraintdef查询系统表直接获取格式化后的约束定义,ESQL/C代码示例:
// 声明宿主变量
EXEC SQL BEGIN DECLARE SECTION;
    char con_def[1024];
    char db_user[32] = "你的数据库用户名";
    char db_pwd[32] = "你的数据库密码";
    char db_name[32] = "你的数据库名";
EXEC SQL END DECLARE SECTION;

// 连接数据库
EXEC SQL CONNECT TO :db_name USER :db_user USING :db_pwd;
if (SQLCODE != 0) {
    printf("数据库连接失败\n");
    return -1;
}

// 查询目标约束定义
EXEC SQL SELECT pg_get_constraintdef(c.oid) INTO :con_def
         FROM pg_constraint c
         JOIN pg_class t ON c.conrelid = t.oid
         WHERE t.relname = 'p' AND c.conname = 'check_name_of_det';

// 输出完整约束语句
printf("ALTER TABLE p\nADD CONSTRAINT check_name_of_det\nCHECK %s;\n", con_def);

EXEC SQL DISCONNECT ALL;
  • 直接打印固定约束内容:
    如果你只需要输出你指定的固定约束,直接打印对应字符串即可:
printf("ALTER TABLE p\nADD CONSTRAINT check_name_of_det \nCHECK ((name = 'Screw' AND n_det = 'P6') OR n_det <>'P6');\n");

约束逻辑中文说明

该约束的作用是:仅当name字段取值为Screw时,n_det字段才允许设置为P6;其余所有场景下n_det字段都不能取值为P6。

内容的提问来源于stack exchange,提问作者karver35

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 06:36:03