pg数据库查找出所有未建立主键的表的超级简单方法,只需要使用到一张系统表

第一章 问题解决

step1 找出数据库中所有的表英文名称

找出数据库中所有的表英文名称,命名为表A

SELECT * from pg_class where pg_class.reltoastrelid!=0 and pg_class.relname not like 'pg_%' and pg_class.relname not like 'sql_%'

step2 找出所有主键的表

找出所有主键的表,命名为表B

SELECT pg_class.relname from pg_class where pg_class.relname like '%_pkey'

step3 查找出未建立主键的表

方式是:从A表中取出不在B表中去掉后缀‘_pkey’的元素,即可完成

SELECT A.a1 from (SELECT pg_class.relname a1 from pg_class where pg_class.reltoastrelid!=0 and pg_class.relname not like 'pg_%' and pg_class.relname not like 'sql_%' ) as A
where A.a1 not in  
(SELECT split_part(pg_class.relname,'_pkey',1) as aa from pg_class where pg_class.relname like '%_pkey')

第二章 知识补充

pg_constraint 该系统表存储PostgreSQL中表对象的检查约束、主键、唯一约束和外键约束。
pg_attribute该系统表存储所有表(包括系统表,如pg_class)的字段信息。数据库中的每个表的每个字段在pg_attribute表中都有一行记录。
pg_type该系统表存储有关数据类型的信息。
pg_class该系统表记录了数据表、索引(仍然需要参阅pg_index)、序列、视图、复合类型和一些特殊关系类型的元数据

pg_constraint.conname (约束名字)
pg_constraint.conrelid (该约束所在的表,如果不是表约束则为0)
pg_constraint.conkey (如果是表约束,则是约束控制的字段列表)
pg_constraint.contypec ( 检查约束, f = 外键约束, p = 主键约束, u = 唯一约束)
pg_constraint.conkey (如果是表约束(包含外键,但是不包含约束触发器),则是约束字段的列表)
pg_attribute.attname (字段名)
pg_attribute.attrelid (此字段所属的表)
pg_attribute.atttypid (字段的数据类型)
pg_attribute.attnum (字段数目。普通字段是从 1 开始计数的。系统字段 (比如oid)有(任意)负数)
pg_type.typname (数据类型名字)
pg_type.oid (行标识符(隐藏属性;必须明确选择))
pg_class.relname (数据类型名字)
pg_class.oid (行标识符(隐藏属性; 必须明确选择))

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值