--获得指定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