db/postgreSQL
postgreSQL 에서 테이블 형상 scan
너도
2019. 11. 18. 15:24
-- 컬럼 정보 조회..
with info as (
select '%%' table_catalog
,'%%' table_schema
,'%' table_name
from dual
)
,t_cmmt as (
SELECT ps.schemaname as table_schema
,PS.RELNAME as table_name
,PD.DESCRIPTION AS TABLE_COMMENT
FROM PG_STAT_USER_TABLES PS
inner join PG_DESCRIPTION PD
on PS.RELID = PD.OBJOID
WHERE 1=1
and ps.schemaname = (select table_schema from info)
and PS.RELNAME like '%'||(select table_name from info)||'%'
AND PD.OBJSUBID = 0
)
,t_col as(
select tc.table_catalog
, tc.table_schema
, tc.table_name table_name
, tc.column_name column_name
, udt_name column_type
, character_maximum_length column_length
, ordinal_position column_position
from information_schema.columns tc
where 1=1
and tc.table_catalog = (select table_catalog from info)
and tc.table_schema = (select table_schema from info)
and tc.table_name like '%'||(select table_name from info)||'%'
)
,pk as (
select tcnst.constraint_catalog
,tcnst.table_schema
,tcnst.table_name
,ccu.column_name
from information_schema.TABLE_CONSTRAINTS tcnst
inner join information_schema.key_column_usage ccu
on tcnst.constraint_catalog = ccu.constraint_catalog
and tcnst.table_schema = ccu.table_schema
and tcnst.table_name = ccu.table_name
where tcnst.constraint_catalog = (select table_catalog from info)
and tcnst.table_schema = (select table_schema from info)
and tcnst.table_name like '%'||(select table_name from info)||'%'
and constraint_type = 'PRIMARY KEY'
)
,col_cmt as (
select schemaname
,relname table_name
,pd.objsubid posi
,description col_comment
from PG_DESCRIPTION PD
inner join PG_STAT_ALL_TABLES PS
on pd.objoid = PS.relid
where PS.schemaname = (select table_schema from info)
and ps.relname like '%'||(select table_name from info)||'%'
)
select t_cmmt.table_name
,t_cmmt.TABLE_COMMENT
,t_col.column_name
,t_col.column_type
,t_col.column_length leng
,t_col.column_position p
,case when pk.column_name is null then '' else 'Y' end pk
,col_cmt.col_comment
from t_cmmt
inner join t_col
on t_cmmt.table_schema =t_col.table_schema
and t_cmmt.table_name =t_col.table_name
left outer join pk
on t_col.table_schema =pk.table_schema
and t_col.table_name =pk.table_name
and t_col.column_name = pk.column_name
inner join col_cmt
on t_col.table_schema =col_cmt.schemaname
and t_col.table_name =col_cmt.table_name
and t_col.column_position = col_cmt.posi
order by 1,2, column_position