/* openGauss查表 */select(casewhen substr(version(),0,1)='('then substring(substr(version(),2, length(version()))from'^[^ ]+')else substring(version()from'^[^ ]+')end)::textas database_type
,ic.table_schema::textasschema,o.owner::text,ic.table_name::text,tab_com.description::textas table_comment
,ic.ordinal_position::textas column_num
,ic.column_name::text,(casewhen ic.data_type ='bigint'then'INT8'when ic.data_type ='integer'then'INT4'when ic.data_type ='smallint'then'INT2'when ic.data_type in('nvarchar2')AND ic.character_maximum_length ISNOTNULLthen upper(ic.data_type)||'('|| ic.character_maximum_length ||')'when ic.data_type in('nvarchar2')AND ic.character_maximum_length ISNULLthen'NVARCHAR2'when ic.data_type in('character varying')then'VARCHAR('|| ic.character_maximum_length ||')'when ic.data_type in('character')then'CHAR('|| ic.character_maximum_length ||')'when ic.data_type ='timestamp without time zone'then'TIMESTAMP('|| ic.datetime_precision ||')'when ic.data_type ='time without time zone'then'TIME('|| ic.datetime_precision ||')'when ic.data_type ='numeric'and ic.numeric_precision isnotnulland ic.numeric_scale isnotnullthen'NUMERIC('|| ic.numeric_precision ||','|| ic.numeric_scale ||')'when ic.data_type ='numeric'and ic.numeric_precision isnulland ic.numeric_scale isnullthen'NUMERIC'when ic.data_type ='text'then'TEXT'when ic.data_type ='date'then'DATE'else upper(ic.data_type)end)::textas data_type
,col_com.description::textas column_comment
,(CASEwhen(POSITION(lower('::regclass')IN lower(ic.column_default))>0)thenREPLACE(ic.column_default,'::regclass','')when(POSITION(lower('::integer')IN lower(ic.column_default))>0)thenREPLACE(REPLACE(ic.column_default,'::integer',''),'''','')else ic.column_default
end)::textas column_default
,ic.is_nullable::text,(casewhen pc.conname isnullthennull::textelse'Y'end)::textas pkey
from pg_class c
-- join db_objects o join adm_objects o
on o.object_id = c.oid and o.object_type like'%table%'and c.relkind in('r','p')-- and c.relname ~ '[0-9]'join pg_namespace n
on c.relnamespace = n.oid
join information_schema.columns ic
on ic.table_name = c.relname
and n.nspname = ic.table_schema
leftjoin pg_description tab_com
on tab_com.objoid = c.oid
and tab_com.objsubid =0leftjoin pg_description col_com
on col_com.objoid = c.oid
and col_com.objsubid = ic.ordinal_position
leftjoin(SELECT conname, conrelid , unnest(conkey)as column_num
FROM pg_constraint
where contype ='p')as pc
on pc.conrelid = c.oid
and pc.column_num = ic.ordinal_position
where1=1orderby ic.table_schema, ic.table_name, ic.ordinal_position
;
二、openGauss查索引
/* openGauss查索引 */with t as(select(casewhen t1.indexdef ~'^.* WHERE .*$'then REGEXP_REPLACE(t1.indexdef,'^.*\((.*)\).* WHERE .*$','\1')else REGEXP_REPLACE(t1.indexdef,'^.*\((.*)\).*$','\1')end)::varcharas index_columns
,t1.*from(select'gs_et_sit'::varcharas source
,o.owner::varchar,ist.table_schema::varcharas schemaname
,c.relname::varcharas tablename
,c1.relname::varcharas indexname
,(case i.indisunique
when't'then'Y'when'f'then'N'end)::varcharas index_is_unique
,(case i.indisprimary
when't'then'Y'when'f'then'N'end)::varcharas index_is_primary
,(pg_get_indexdef(i.indexrelid))::varcharas indexdef_old
,(casewhen pg_get_indexdef(i.indexrelid)~'^.*WHERE.*$'thenreplace(replace(replace(REGEXP_REPLACE(pg_get_indexdef(i.indexrelid),'^.*WHERE \((.*)\).*.*$','\1'),'::text',''),'(',''),')','')elseNULLend)::varcharas where_condition
,(casewhen i.indisprimary ='t'then'ALTER TABLE '|| c.relname ||' ADD CONSTRAINT '|| c1.relname ||' PRIMARY KEY ('||(casewhen pg_get_indexdef(i.indexrelid)~'^.*\((.*)\).*\((.*)\).*$'then REGEXP_REPLACE(pg_get_indexdef(i.indexrelid),'^.*\((.*)\).*\((.*)\).*$','\1')else REGEXP_REPLACE(pg_get_indexdef(i.indexrelid),'^.*\((.*)\).*$','\1')end)||');'elsereplace(replace(replace(replace(replace(replace(pg_get_indexdef(i.indexrelid),' USING btree',''),' TABLESPACE pg_default',''),'::text',''),' WITH (storage_type=USTORE)',''),'WITH (storage_type=ustore)',''),' USING ubtree','')||';'end)::varcharas indexdef
from pg_index i
,pg_class c1
,pg_class c
,information_schema.tables ist
,db_objects o
,pg_namespace n
where i.indexrelid = c1.oid
and i.indrelid = c.oid
and c.relnamespace = n.oid
and c.relname = ist.table_name
and n.nspname = ist.table_schema
and o.object_id = c.oid
and ist.table_schema notin('pg_catalog','db4ai')and ist.table_schema notlike'%\_test%'and o.owner notin('rdsAdmin','hisAdmin')and o.owner notlike'%test%'and c.relname !~*'^pg\_toast\_.*$') t1)select t.source
,t.owner
,t.schemaname asschema,t.tablename
,t.indexname
,t.indexdef
,t.index_is_primary
,t.index_is_unique
,t.index_columns
,t.where_condition
from t
orderby t.schemaname, t.tablename, t.indexname
;
三、openGauss查序列
/* openGauss查序列 */with c as(select r.rolname::varcharas owner
,n.nspname::varcharasschema,c.relname::varcharas sequence_name
from pg_class c, pg_roles r, pg_namespace n
where c.relowner = r.oid
and c.relnamespace = n.oid
and c.relkind ='S'),s as(select sequence_owner::varcharas owner
,sequence_name::varchar,min_value::varchar,max_value::varchar,increment_by::varchar,cache_size::varchar,cycle_flag::varchar,last_number::varcharfrom db_sequences
)select c.owner::varchar,c.schema::varchar,c.sequence_name::varchar,s.min_value::varchar,s.max_value::varchar,s.increment_by::varchar,s.cache_size::varchar,s.cycle_flag::varchar,s.last_number::varcharfrom C
innerjoin s on c.owner = s.owner and c.sequence_name = s.sequence_name
orderbyschema, sequence_name;
四、openGauss查权限
/* openGauss查权限 */WITH pg_rel_privs AS(SELECT xx.schemaname
,xx.owner
,xx.relname
,xx.relkind
,xx.relacls[1]AS grantee
,xx.relacls[2]AS privilege
,xx.relacls[3]AS grantor
FROM(SELECT(SELECT n.nspname
FROM pg_namespace n
WHERE n.oid = tt.relnamespace)AS schemaname
,o.owner
,tt.relname
,tt.relkind
,regexp_split_to_array(unnest(tt.relacl)::charactervarying::text,'=|/'::text)AS relacls
FROM pg_class tt
LEFTJOIN db_objects o
ON tt.oid = o.object_id
WHERE tt.relacl ISNOTNULL) xx)SELECT t.schemaname::varcharasschema,t.owner::varchar,t.relname::varcharas object_name
,(CASEWHEN t.relkind ='r' ::charTHEN'table' ::textWHEN t.relkind ='S' ::charTHEN'sequence' ::textWHEN t.relkind ='v' ::charTHEN'view' ::textWHEN t.relkind ='p' ::charTHEN'patition table' ::textELSE t.relkind ::textEND)::varcharAStype,t.grantor::varchar,t.grantee::varchar,(TRIM(CASEWHEN instr(t.privilege,'a')>0THEN'insert,'END||CASEWHEN instr(t.privilege,'r')>0THEN'select,'END||CASEWHEN instr(t.privilege,'w')>0THEN'update,'END||CASEWHEN instr(t.privilege,'d')>0THEN'delete,'END||CASEWHEN instr(t.privilege,'D')>0THEN'truncate,'END||CASEWHEN instr(t.privilege,'U')>0THEN'usage,'END,','))::varcharAS privilege
FROM pg_rel_privs t
WHERE t.grantor !='rdsAdmin'AND t.grantee != t.grantor
orderbyschema,object_name,type,grantor,grantee,privilege;
五、openGauss或PostgreSQL查函数
/* openGauss或PostgreSQL查函数 */select(CASEschemawhen'tzq'then'f_g_tzq'elseschemaEND)::varcharasschema,(CASE owner
when'tzq'then'f_g_tzq'else owner
END)::varcharas owner
,pro_name,pro_arg
,pro_arg_type
,pro_ret_type
,pro_content
from(select*from(select pn.nspname::varcharASschema,r.rolname::varcharas owner
,pc.proname::varcharas pro_name
,pc.proargnames::varcharas pro_arg
,(SELECT array(SELECT format_type(val,NULL)FROM unnest(proargtypes)as val))::varcharas pro_arg_type
,format_type(pc.prorettype,NULL)::varcharas pro_ret_type
,REGEXP_REPLACE(pg_get_functiondef(pc."oid")::text,'^\(4,"(.*)"\)$','\1')::textas pro_content
from pg_proc pc
innerjoin pg_roles r
on pc.proowner = r.oid
innerjoin pg_namespace pn
on pc.pronamespace = pn.oid
where1=1and pn.nspname notin('pg_catalog','dbe_pldebugger')and r.rolname notin('rdsAdmin')and pc.proargnames isnotnullorderby r.rolname asc) aa
unionallselect pn.nspname::varcharASschema,r.rolname::varcharas owner
,pc.proname::varcharas pro_name
,pc.proargnames::varcharas pro_arg
,proargtypes::varcharAS pro_arg_type
,format_type(pc.prorettype,NULL)::varcharas pro_ret_type
-- ,pc.oid,REGEXP_REPLACE(pg_get_functiondef(pc.oid)::text,'^\(4,"(.*)"\)$','\1')::textas pro_content
from pg_proc pc
innerjoin pg_roles r
on pc.proowner = r.oid
innerjoin pg_namespace pn
on pc.pronamespace = pn.oid
where1=1and pn.nspname notin('pg_catalog','dbe_pldebugger')and r.rolname notin('rdsAdmin')and pc.proargnames isnull) bb
orderbyschema, pro_name;
六、PostgreSQL查表
/* PostgreSQL查表 *//* 更新日志:
由于 information_schema.columns 有权限控制,不是该用户能查的权限就查不到,故下掉。
采用 pg_attrdef 来获取列的默认值
*/with tab_info_v as(SELECT substring(version()FROM'(\S+)')as database_type
,n.nspname ASschema,r.rolname as owner
,c.relname AS table_name
,(col_description(c.oid,0))::charactervaryingAS table_comment
,a.attnum
,a.attname AS column_name
,concat_ws('', t.typname)AS data_type
,(CASEWHEN a.attlen >0THEN a.attlen
WHEN t.typname ='bit'THEN a.atttypmod
ELSE a.atttypmod -4END)AS data_length
,CASE-- 为了和 高斯比对WHEN(((format_type(a.atttypid, a.atttypmod))::charactervarying)::text='date'::text)THEN'TIMESTAMP(0)'::charactervaryingWHEN(((format_type(a.atttypid, a.atttypmod))::charactervarying)::text='bigint'::text)THEN'INT8'::charactervaryingWHEN(((format_type(a.atttypid, a.atttypmod))::charactervarying)::text='smallint'::text)THEN'INT2'::charactervaryingWHEN(((format_type(a.atttypid, a.atttypmod))::charactervarying)::text='integer'::text)THEN'INT4'::charactervaryingWHEN(left(((format_type(a.atttypid, a.atttypmod))::charactervarying)::text,17)='character varying'::text)THEN(replace(((format_type(a.atttypid, a.atttypmod))::charactervarying)::text,'character varying'::text,'VARCHAR'::text))::charactervaryingWHEN(left(((format_type(a.atttypid, a.atttypmod))::charactervarying)::text,9)='character'::text)THEN(replace(((format_type(a.atttypid, a.atttypmod))::charactervarying)::text,'character'::text,'char'::text))::charactervaryingWHEN(((format_type(a.atttypid, a.atttypmod))::text)::text='timestamp without time zone'::text)THEN'TIMESTAMP'::charactervaryingWHEN(((format_type(a.atttypid, a.atttypmod))::text)::text='timestamp(0) without time zone'::text)THEN'TIMESTAMP(0)'::charactervaryingWHEN(((format_type(a.atttypid, a.atttypmod))::text)::text='timestamp(6) without time zone'::text)THEN'TIMESTAMP(6)'::charactervaryingELSE(format_type(a.atttypid, a.atttypmod))::charactervaryingENDAS typelen
,(CASEWHEN a.attnotnull =TRUETHEN'NO'ELSE'YES'END)AS is_nullable -- 可为空,(CASEWHEN(SELECTCOUNT(pg_constraint.*)FROM pg_constraint
INNERJOIN pg_class
ON pg_constraint.conrelid = pg_class.oid
INNERJOIN pg_attribute
ON pg_attribute.attrelid = pg_class.oid
AND pg_attribute.attnum =ANY(pg_constraint.conkey)INNERJOIN pg_type
ON pg_type.oid = pg_attribute.atttypid
WHERE pg_class.relname = c.relname
AND pg_constraint.contype ='p'AND pg_attribute.attname = a.attname
and pg_class.relowner = c.relowner
)>0THEN'Y'ELSENULLEND)AS pkey
,pg_get_expr(ad.adbin, ad.adrelid)as data_default
,(SELECT description
FROM pg_description
WHERE objoid = a.attrelid
AND objsubid = a.attnum)AS column_comment
FROM pg_class c
innerjoin pg_roles r
on c.relowner = r.oid
and c.relkind in('r','p')and c.relpartbound isnull-- and ((relkind = 'p') or (relkind = 'r' and relpartbound is null))innerjoin pg_attribute a
on a.attnum >0AND a.attrelid = c.oid
innerjoin pg_namespace n
on n.oid = c.relnamespace
innerjoin pg_type t
on a.atttypid = t.oid
leftjoin pg_attrdef ad -- 列的默认值on ad.adrelid = c.oid
and ad.adnum = a.attnum
WHERE1=1and n.nspname notin('information_schema')ORDERBY c.relname ASC,a.attnum ASC,a.attname ASC)select database_type
-- ,schema,CASEschemawhen'tzq'then'f_g_tzq'elseschemaENDasschema,CASE owner
when'tzq'then'f_g_tzq'elseschemaENDas owner
,table_name, table_comment
,attnum,column_name
,replace(upper(typelen),'VARCHAR','NVARCHAR2')as data_type
,column_comment
,data_default as column_default
,is_nullable
,pkey
from tab_info_v v
where1=1-- and table_name = 'ets_risk_premium_check_tmp'-- and schema <> ownerand table_name notlike'adms_ogg_checkpoint%'-- and table_name !~ '[p][0-9]{2}$'-- and table_name !~ '[p][0-9]{1}$'-- and table_name ~ '[p][0-9]{1}$'orderbyschema, table_name, attnum, column_name;
七、PostgreSQL查索引
/* PostgreSQL查索引 */-- drop view if exists pg_index_info_v;-- create view pg_index_info_v as with t as(select u.usename
,c.relname as tablename
,c1.relname as indexname
,case i.indisunique
when't'then'Y'when'f'then'N'endas index_is_unique -- 是否为唯一索引,case i.indisprimary
when't'then'Y'when'f'then'N'endas index_is_primary -- 是否为主键,casewhen pg_get_indexdef(i.indexrelid)~'^.* WHERE .*$'then REGEXP_REPLACE(pg_get_indexdef(i.indexrelid),'^.*\((.*)\).* WHERE .*$','\1')else REGEXP_REPLACE(pg_get_indexdef(i.indexrelid),'^.*\((.*)\).*$','\1')endas index_columns
,replace(pg_get_indexdef(i.indexrelid),'USING btree ','')||';'as indexdef1
,casewhen i.indisprimary ='t'then'ALTER TABLE '|| c.relname ||' ADD CONSTRAINT '|| c1.relname ||' PRIMARY KEY ('||(casewhen pg_get_indexdef(i.indexrelid)~'^.*\((.*)\).*\((.*)\).*$'then REGEXP_REPLACE(pg_get_indexdef(i.indexrelid),'^.*\((.*)\).*\((.*)\).*$','\1')else REGEXP_REPLACE(pg_get_indexdef(i.indexrelid),'^.*\((.*)\).*$','\1')end)||');'elsereplace(replace(replace(pg_get_indexdef(i.indexrelid),' USING btree',''),' TABLESPACE pg_default',''),'::text','')||';'endas indexdef
,casewhen pg_get_indexdef(i.indexrelid)~'^.*WHERE.*$'thenreplace(replace(replace(REGEXP_REPLACE(pg_get_indexdef(i.indexrelid),'^.*WHERE \((.*)\).*.*$','\1'),'::text',''),'(',''),')','')elseNULLendas where_condition
--,i.* from pg_index i
,pg_class c1
,pg_class c
,pg_user u
where i.indexrelid = c1.oid
and i.indrelid = c.oid
and c.relowner = u.usesysid
and c.relkind in('r','p')and c.relpartbound isnull-- and u.usename = CURRENT_USERand c.relname !~*'^pg\_toast\_.*$')selectCASE t.usename
when'tzq'then'f_g_tzq'else t.usename
ENDasschema,t.tablename
,t.indexname
,casewhen index_is_primary ='Y'then'ALTER TABLE '|| t.tablename ||' ADD CONSTRAINT '|| t.indexname ||' PRIMARY KEY ('|| t.index_columns ||');'else t.indexdef
endas indexdef
,t.index_is_unique
,t.index_is_primary
,t.index_columns
,t.where_condition
from t
where t.tablename notlike'adms_ogg_checkpoint%'orderby t.usename, t.tablename, t.indexname;