如何编写PostgreSQL查询获取指定schema中不含特定数据类型列的表
PostgreSQL 查询指定 Schema 下无特定类型列表的解决方案
需求说明
查询 project schema 下所有不包含 integer 类型列的表,可灵活替换为其他需要排除的数据类型。
方案1:使用 NOT EXISTS 实现(推荐)
逻辑直观,查询性能更优,直接排除存在目标类型列的表即可:
SELECT DISTINCT table_name FROM information_schema.columns c1 WHERE table_schema = 'project' AND NOT EXISTS ( SELECT 1 FROM information_schema.columns c2 WHERE c2.table_schema = c1.table_schema AND c2.table_name = c1.table_name AND c2.data_type = 'integer' -- 此处替换为要排除的目标数据类型 );
方案2:基于现有聚合写法调整
和你当前的查询思路一致,按表分组后判断该表下是否从未出现过目标类型:
SELECT table_name FROM information_schema.columns WHERE table_schema = 'project' GROUP BY table_name HAVING COUNT(CASE WHEN data_type = 'integer' THEN 1 END) = 0;
注意事项
- 数据类型名称需要和
information_schema.columns中data_type字段的取值完全匹配,比如短写的int要替换为标准名integer,varchar要替换为character varying才能正确匹配 - 如果需要同时排除多种类型,仅需在条件中新增对应判断即可,比如要同时排除
integer和text类型,方案2的HAVING条件可修改为:HAVING COUNT(CASE WHEN data_type IN ('integer', 'text') THEN 1 END) = 0
内容的提问来源于stack exchange,提问作者speedy
相关产品推荐
相关产品推荐

