pgsql 实现用户自定义表结构信息获取

 更新时间:2021年01月04日 11:17:01   作者:_rtf  
这篇文章主要介绍了pgsql 实现用户自定义表结构信息获取,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

1. 获取表中普通信息:如字段名,字段类型等

SELECT column_name, data_type, ordinal_position, is_nullable 
FROM information_schema."columns"
WHERE "table_name"='TABLE-NAME' -- 将 'TABLE-NAME' 换成自己的表

2.获取所有的表和视图

SELECT table_name, table_type FROM INFORMATION_SCHEMA.tables WHERE table_schema='public' AND table_type IN ('BASE TABLE','VIEW')

3.获取约束注释

SELECT obj_description(oid, 'pg_constraint') AS d FROM pg_constraint WHERE conname = constraint_name;

4.获取表的约束

-- conname 约束名称
-- contype 约束类型(p:主键, f:外键, c: 检查约束, u:唯一约束)
-- conkey 约束字段
-- confkey 外键字段
-- consrc 检查约束条件
-- confreltable 外键字段引用的表
SELECT conname, contype, conkey, consrc, 
  (SELECT array_agg(column_name::text) FROM INFORMATION_SCHEMA.COLUMNS WHERE ordinal_position = any(conkey) AND table_name= 'TABLE-NAME') AS conkey, 
  (SELECT column_name FROM INFORMATION_SCHEMA.COLUMNS WHERE ordinal_position = any(confkey) AND table_name='TABLE-NAME') AS confkey, 
  (SELECT relname FROM pg_class WHERE oid = confrelid) AS confreltable
FROM pg_constraint WHERE conrelid=(SELECT oid FROM pg_class WHERE relname ='TABLE-NAME'); -- 将 'TABLE-NAME' 换成自己的表

5.获取表的触发器

SELECT trigger_name, event_manipulation, event_object_table, action_statement, action_orientation, action_timing FROM INFORMATION_SCHEMA.TRIGGERS;

6.获取字段的注释

--table_oid 表的oid
--col_position 字段的位置
SELECT col_description(table_oid, col_position);

补充:查询PostgreSQL库中所有表的表结构信息SQL

我就废话不多说了,大家还是直接看代码吧~

select
(select relname as comment from pg_class where oid=a.attrelid) as table_name,
 row_number() over(partition by (select relname as comment from pg_class where oid=a.attrelid) order by a.attnum),
a.attname as column_name,
format_type(a.atttypid,a.atttypmod) as data_type,
(case when atttypmod-4>0 then atttypmod-4 else 0 end)data_length,
(case when (select count(*) from pg_constraint where conrelid = a.attrelid and conkey[1]=attnum and contype='p')>0 then '是' else '否' end) as 主键约束,
(case when (select count(*) from pg_constraint where conrelid = a.attrelid and conkey[1]=attnum and contype='u')>0 then '是' else '否' end) as 唯一约束,
(case when (select count(*) from pg_constraint where conrelid = a.attrelid and conkey[1]=attnum and contype='f')>0 then '是' else '否' end) as 外键约束,
(case when a.attnotnull=true then '是' else '否' end) as nullable,
col_description(a.attrelid,a.attnum) as comment
from pg_attribute a
where attstattarget=-1 and attrelid in (select oid from pg_class where relname in(select relname from pg_class where relkind ='r' and relname 
in 
(select tablename from pg_tables where tablename not like 'pg_%' and tablename not like 'sql_%' and schemaname not in(XXXX) and tablename not in(XXXX)
))
order by table_name,a.attnum;

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

相关文章

  • postgreSQL使用pgAdmin备份服务器数据的方法

    postgreSQL使用pgAdmin备份服务器数据的方法

    这篇文章主要介绍了postgreSQL使用pgAdmin备份服务器数据的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • postgresql 导出建表语句的命令操作

    postgresql 导出建表语句的命令操作

    这篇文章主要介绍了postgresql 导出建表语句的命令操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • PostgreSQL去掉表中所有不可见字符的操作

    PostgreSQL去掉表中所有不可见字符的操作

    这篇文章主要介绍了PostgreSQL去掉表中所有不可见字符的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • CVE-2019-9193之PostgreSQL 任意命令执行漏洞的问题

    CVE-2019-9193之PostgreSQL 任意命令执行漏洞的问题

    这篇文章主要介绍了CVE-2019-9193:PostgreSQL 任意命令执行漏洞,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • postgres 使用存储过程批量插入数据的操作

    postgres 使用存储过程批量插入数据的操作

    这篇文章主要介绍了postgres 使用存储过程批量插入数据的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • Postgresql中json和jsonb类型区别解析

    Postgresql中json和jsonb类型区别解析

    在我们的业务开发中,可能会因为特殊【历史,偷懒,防止表连接】经常会有JSON或者JSONArray类的数据存储到某列中,这个时候再PG数据库中有两种数据格式可以直接一对多或者一对一的映射对象,接下来通过本文介绍Postgresql中json和jsonb类型区别,需要的朋友可以参考下
    2024-06-06
  • PostgreSQL之分区表(partitioning)

    PostgreSQL之分区表(partitioning)

    通过合理的设计,可以将选择一定的规则,将大表切分多个不重不漏的子表,这就是传说中的partitioning。比如,我们可以按时间切分,每天一张子表,比如我们可以按照某其他字段分割,总之了就是化整为零,提高查询的效能
    2016-11-11
  • PostgreSQL WAL日志膨胀的处理过程

    PostgreSQL WAL日志膨胀的处理过程

    PostgreSQL由于WAL日志的机制,导致其在不正确配置的情况下会出现磁盘空间暴涨的情况,本文档就此情景写一般处理办法,感兴趣的小伙伴跟着小编一起来看看吧
    2024-12-12
  • PostgreSQL中的template0和template1库使用实战

    PostgreSQL中的template0和template1库使用实战

    这篇文章主要介绍了PostgreSQL中的template0和template1库使用实战,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • Linux CentOS 7安装PostgreSQL9.3图文教程

    Linux CentOS 7安装PostgreSQL9.3图文教程

    这篇文章主要为大家详细介绍了Linux CentOS 7安装PostgresSQL9.3图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11

最新评论