如何从information_schema获取PostgreSQL检查约束的列名
获取指定表的CHECK约束基础信息
可以通过以下查询获取指定表的检查约束类型、约束名称、表名以及约束条件(check_clause):
SELECT tc.constraint_type, tc.constraint_name, tc.table_name, cc.check_clause FROM information_schema.table_constraints tc JOIN information_schema.check_constraints cc ON cc.constraint_name = tc.constraint_name WHERE tc.table_name = $1 and tc.constraint_type = 'CHECK'
constraint_column_usage的局限性
从information_schema.constraint_column_usage中可以获取PRIMARY或UNIQUE约束对应的关联列,但无法获取CHECK约束的关联列,示例查询如下:
SELECT * FROM information_schema.constraint_column_usage where table_name = $1
获取CHECK约束关联列的最终方案
调整查询逻辑后,可实现获取CHECK约束关联列名的需求,最终SQL如下:
SELECT ccu.table_schema, ccu.table_name, ccu.constraint_name, ccu.column_name, cc.check_clause FROM information_schema.constraint_column_usage ccu JOIN information_schema.check_constraints cc ON ccu.constraint_name = cc.constraint_name WHERE ccu.constraint_name IN ( SELECT constraint_name FROM information_schema.check_constraints ) AND ccu.table_name = $1;
内容的提问来源于stack exchange,提问作者jmc42
相关产品推荐
相关产品推荐

