PostgreSQL 查询数据表、视图信息

复制代码
--获得指定schema范围内的所有表和视图的列表,可指定一个排除表前缀模式
复制代码
with param as (select 'public,iit' as schema_name,'db2g%' as exclude_pattern)
    ,base_info as (
        --获得所有基表
        select pg_namespace.nspname as schema_name, a.relname as tbl_name ,'TBL' as tbl_type, b.description as tbl_comment
        from pg_class a
            join pg_namespace on a.relnamespace=pg_namespace.oid
            left join (select * from pg_description where objsubid =0 ) b
                on a.oid = b.objoid
        where a.relkind='r'
             and a.relname not like (select exclude_pattern from param)
             and pg_namespace.nspname in (select regexp_split_to_table(schema_name,',') from param)
        union all
        ---获取所有视图
        SELECT schemaname as schema_name, viewname as tbl_name,'VW' as tbl_type, null as tbl_comment
        FROM pg_views
        WHERE schemaname in (select regexp_split_to_table(schema_name,',') from param)
    )
select * from base_info;
复制代码
--获得指定schema范围内的所有表和视图的数据列信息,可指定一个排除表前缀模式
复制代码
with param as (select 'public,iit' as schema_name,'db2g%' as exclude_pattern),
     base_info as (
         select table_schema
              , table_name
              , ordinal_position                                                      as Colorder
              , column_name                                                           as ColumnName
              , data_type                                                             as TypeName
              , coalesce(character_maximum_length, numeric_precision, -1)             as Length
              , numeric_scale                                                         as Scale
              , case is_nullable when 'NO' then 0 else 1 end                          as CanNull
              , column_default                                                        as DefaultVal
              , case when position('nextval' in column_default) > 0 then 1 else 0 end as IsIdentity
              , case when b.pk_name is null then 0 else 1 end                         as IsPK
              , c.DeText
         from information_schema.columns
                  left join (
                             select pg_attr.attname as colname
                                    ,pg_constraint.conname as pk_name
                                    ,pg_class.relname as tblname
                                    ,pg_namespace.nspname as schema_name
                             from pg_constraint
                                      join pg_class on pg_constraint.conrelid = pg_class.oid
                                      join pg_attribute pg_attr on pg_attr.attrelid = pg_class.oid
                                            and pg_attr.attnum = pg_constraint.conkey[1]
                                      join pg_type on pg_type.oid = pg_attr.atttypid
                                      join pg_namespace on pg_constraint.connamespace=pg_namespace.oid
                             where pg_constraint.contype = 'p'
                            ) b on b.colname = information_schema.columns.column_name
                                    and b.tblname=information_schema.columns.table_name
                                    and b.schema_name=information_schema.columns.table_schema
                  left join (
                             select attname, description as DeText, pg_class.relname as tblname,pg_namespace.nspname as schema_name
                             from pg_class
                                      join pg_namespace on pg_class.relnamespace=pg_namespace.oid
                                      left join pg_attribute pg_attr on pg_attr.attrelid = pg_class.oid
                                      left join pg_description pg_desc on pg_desc.objoid = pg_attr.attrelid
                                 and pg_desc.objsubid = pg_attr.attnum
                             where pg_attr.attnum > 0
                               and pg_attr.attrelid = pg_class.oid
                         ) c on c.attname = information_schema.columns.column_name
                                and c.tblname=information_schema.columns.table_name
                                and c.schema_name=information_schema.columns.table_schema
         where table_schema in (select regexp_split_to_table(schema_name,',') from param)
              and table_name not like (select exclude_pattern from param)
         order by table_name,ordinal_position
     )
select * from base_info;
复制代码
--查询指定模式下的表和视图

with param as (select 'public' as schema_name,'db2g%' as exclude_pattern)
--获得所有基表
select a.relname as tbl_name ,'TBL' as tbl_type, b.description as tbl_comment
from pg_class a
    left join (select *
                from pg_description where objsubid =0 ) b
        on a.oid = b.objoid
where a.relname in (select tablename
                    from pg_tables
                    where schemaname = (select schema_name from param))
     and a.relname not like (select exclude_pattern from param)
union all
---获取所有视图
SELECT viewname as tbl_name,'VW' as tbl_type, null as tbl_comment
FROM pg_views
WHERE schemaname =(select schema_name from param)
order by tbl_name asc;

--查询指定数据基表的列信息

复制代码
with param as (select 'emp' as tblname),
     base_info as (
         select ordinal_position                                                      as Colorder
              , column_name                                                           as ColumnName
              , data_type                                                             as TypeName
              , coalesce(character_maximum_length, numeric_precision, -1)             as Length
              , numeric_scale                                                         as Scale
              , case is_nullable when 'NO' then 0 else 1 end                          as CanNull
              , column_default                                                        as DefaultVal
              , case when position('nextval' in column_default) > 0 then 1 else 0 end as IsIdentity
              , case when b.pk_name is null then 0 else 1 end                         as IsPK
              , c.DeText
         from information_schema.columns
                  left join (
                             select pg_attr.attname as colname, pg_constraint.conname as pk_name
                             from pg_constraint
                                      join pg_class on pg_constraint.conrelid = pg_class.oid
                                      join pg_attribute pg_attr on pg_attr.attrelid = pg_class.oid
                                 and pg_attr.attnum = pg_constraint.conkey[1]
                                      join pg_type on pg_type.oid = pg_attr.atttypid
                             where pg_class.relname = (select tblname from param)
                               and pg_constraint.contype = 'p'
                            ) b on b.colname = information_schema.columns.column_name
                  left join (
             select attname, description as DeText
             from pg_class
                      left join pg_attribute pg_attr on pg_attr.attrelid = pg_class.oid
                      left join pg_description pg_desc on pg_desc.objoid = pg_attr.attrelid
                 and pg_desc.objsubid = pg_attr.attnum
             where pg_attr.attnum > 0
               and pg_attr.attrelid = pg_class.oid
               and pg_class.relname = (select tblname from param)
         ) c on c.attname = information_schema.columns.column_name
         where table_schema = 'public'
           and table_name = (select tblname from param)
         order by ordinal_position asc
     )
select * from base_info
相关推荐
焱焱枫23 分钟前
自适应SQL计划管理(Adaptive SQL Plan Management)在Oracle 12c中的应用
数据库·sql·oracle
2301_7930698227 分钟前
Spring Boot +SQL项目优化策略,GraphQL和SQL 区别,Spring JDBC 等原理辨析(万字长文+代码)
java·数据库·spring boot·sql·jdbc·orm
hhw19911236 分钟前
spring boot知识点5
java·数据库·spring boot
ITPUB-微风1 小时前
功能开关聚合对象实践:提升金融领域的高可用性
网络·数据库·金融
去看日出1 小时前
Linux(centos)系统安装部署MySQL8.0数据库(GLIBC版本)
linux·数据库·centos
Hanyaoo2 小时前
为什么mvcc中?m_ids 列表并不等同于 min_trx_id 和 max_trx_id 之间的所有事务 ID
数据库
偏右右2 小时前
PL/SQL 异常处理
数据库·sql·oracle
利瑞华3 小时前
Redis 存在线程安全问题吗?为什么?
数据库·redis·安全
小金的学习笔记3 小时前
如何在本地和服务器新建Redis用户和密码
服务器·数据库·redis
听封3 小时前
Redis存在线程安全的问题吗?
数据库·redis·安全