postgresql12查询表名、备注及字段、长度、是否可控、是否主键等信息

阅读: 评论:0

postgresql12查询表名、备注及字段、长度、是否可控、是否主键等信息

postgresql12查询表名、备注及字段、长度、是否可控、是否主键等信息

postgresql12查询表名、备注及字段、长度、是否可控、是否主键等信息

    • 获取表名及备注sql
    • 获取指定表的字段名称、长度、是否为空、是否主键等信息

备注:sql确定有效版本为pgsql12,其他版本未测试,网上很多博客的查询方式以及存在很大问题

获取表名及备注sql

lname as table_name,d.description as comment
frompg_catalog.pg_class c
join pg_catalog.pg_description d onc.oid = d.objoid
lname = 'tableName'and d.objsubid = 0

获取指定表的字段名称、长度、是否为空、是否主键等信息

lname as 表名,a.attname as 列名,(casewhen a.attnotnull = true then trueelse false end) as 是否非空,(casewhen (selectcount(pg_constraint.*)frompg_constraintinner join pg_class lid = pg_class.oidinner join pg_attribute onpg_attribute.attrelid = pg_class.oidand pg_attribute.attnum = any(key)inner join pg_type onpg_type.oid = pg_attribute.lname = c.relnameand pe = 'p'and pg_attribute.attname = a.attname) > 0 then trueelse false end) as 是否是主键,concat_ws('', t.typname) as 字段类型,(casewhen a.attlen > 0 then a.attlenelse a.atttypmod - 4 end) as 长度,d.description as 备注
frompg_class c,pg_attribute a ,pg_type t,pg_description d
lname = 'your_table_name'and a.attnum>0and a.attrelid = c.oidand a.atttypid = t.oidand d.objoid = a.attrelidand d.objsubid = a.attnum
lname desc,a.attnum asc

其中SQL中的

(casewhen (selectcount(pg_constraint.*)frompg_constraintinner join pg_class lid = pg_class.oidinner join pg_attribute onpg_attribute.attrelid = pg_class.oidand pg_attribute.attnum = any(key)inner join pg_type onpg_type.oid = pg_attribute.lname = c.relnameand pe = 'p'and pg_attribute.attname = a.attname) > 0 then trueelse false end) as 是否是主键

有一个比较特殊,那就是网上很多博客都是创建的单主键表,所以在sql中直接获取pg_catelog库下的pg_constraint表的key的key[1]的值,那么问题来了,有几个主键呢?然后你会发现网上的很多博客都是互相抄,然后就掉坑里出不来了,一张表无论你有几个主键,查询到的结果永远都是一个主键。正确的解决方式应该拿pg_attribute表的pg_attribute.attnum去与pg_constraint中的key数组中做匹配,把匹配的全部拉取出来,就不会遗漏主键了。

附:mysql或mariadb就特别简单了,直接往information_schema表里扒tables表和columns表即可,相对来说,postgresql想找点东西还是挺费劲的

本文发布于:2024-02-02 15:38:07,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170685948444762.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:字段   备注   可控   主键   长度
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23