CREATEORREPLACEFUNCTION tabledef(text,text)RETURNStextLANGUAGEsql STRICT AS
$$
WITH attrdef AS(SELECT n.nspname, c.relname, c.oid, pg_catalog.array_to_string(c.reloptions || array(select'toast.'|| x from pg_catalog.unnest(tc.reloptions) x),', ')as relopts,
c.relpersistence, a.attnum, a.attname, pg_catalog.format_type(a.atttypid, a.atttypmod)as atttype,(SELECT substring(pg_catalog.pg_get_expr(d.adbin, d.adrelid,true)for128)FROM pg_catalog.pg_attrdef d WHERE d.adrelid = a.attrelid AND d.adnum = a.attnum AND a.atthasdef)as attdefault,
a.attnotnull,(SELECT c.collname FROM pg_catalog.pg_collation c, pg_catalog.pg_type t WHERE c.oid = a.attcollation AND t.oid = a.atttypid AND a.attcollation <> t.typcollation)as attcollation,
a.attidentity, a.attgenerated
FROM pg_catalog.pg_attribute a
JOIN pg_catalog.pg_class c ON a.attrelid = c.oid
JOIN pg_catalog.pg_namespace n ON c.relnamespace = n.oid
LEFTJOIN pg_catalog.pg_class tc ON(c.reltoastrelid = tc.oid)WHERE n.nspname = $1AND c.relname = $2AND a.attnum >0ANDNOT a.attisdropped
ORDERBY a.attnum
), coldef AS(SELECT attrdef.nspname, attrdef.relname, attrdef.oid, attrdef.relopts, attrdef.relpersistence, pg_catalog.format('%I %s%s%s%s%s', attrdef.attname, attrdef.atttype,casewhen attrdef.attcollation isnullthen''else pg_catalog.format(' COLLATE %I', attrdef.attcollation)end,casewhen attrdef.attnotnull then' NOT NULL'else''end,casewhen attrdef.attdefault isnullthen''elsecasewhen attrdef.attgenerated ='s'then pg_catalog.format(' GENERATED ALWAYS AS (%s) STORED', attrdef.attdefault)when attrdef.attgenerated <>''then' GENERATED AS NOT_IMPLEMENTED'else pg_catalog.format(' DEFAULT %s', attrdef.attdefault)endend,casewhen attrdef.attidentity<>''then pg_catalog.format(' GENERATED %s AS IDENTITY',case attrdef.attidentity when'd'then'BY DEFAULT'when'a'then'ALWAYS'else'NOT_IMPLEMENTED'end)else''end)as col_create_sql
FROM attrdef
ORDERBY attrdef.attnum
), tabdef AS(SELECT coldef.nspname, coldef.relname, coldef.oid, coldef.relopts, coldef.relpersistence, concat(string_agg(coldef.col_create_sql, E',\n '),(select concat(E',\n ',pg_get_constraintdef(oid))from pg_constraint where contype='p'and conrelid = coldef.oid))as cols_create_sql
FROM coldef
GROUPBY coldef.nspname, coldef.relname, coldef.oid, coldef.relopts, coldef.relpersistence
)SELECTFORMAT('CREATE%s TABLE %I.%I%s%s%s;',case tabdef.relpersistence when't'then' TEMP'when'u'then' UNLOGGED'else''end,
tabdef.nspname,
tabdef.relname,coalesce((SELECTFORMAT( E'\n PARTITION OF %I.%I %s\n', pn.nspname, pc.relname, pg_get_expr(c.relpartbound, c.oid))FROM pg_class c
JOIN pg_inherits i ON c.oid = i.inhrelid
JOIN pg_class pc ON pc.oid = i.inhparent
JOIN pg_namespace pn ON pn.oid = pc.relnamespace
WHERE c.oid = tabdef.oid ),FORMAT( E' (\n %s\n)', tabdef.cols_create_sql)),casewhen tabdef.relopts <>''thenformat(' WITH (%s)', tabdef.relopts)else''end,coalesce(E'\nPARTITION BY '||pg_get_partkeydef(tabdef.oid),''))as table_create_sql
FROM tabdef
$$;
1.2 使用
select tabledef('public','t_sys_log');
2. 配置信息
-- 查看tcp设置select*from pg_settings where name like'%tcp%';-- 查看当前连接数selectcount(1)from pg_stat_activity;-- 查看最大连接数show max_connections;
3. 外键相关
-- 禁用外键altertable t_product disabletriggerall;-- 启用外键altertable t_product enabletriggerall;-- 查询xxx数据库中的外键SELECT
tc.constraint_name, tc.table_name, kcu.column_name,
ccu.table_name AS foreign_table_name,
ccu.column_name AS foreign_column_name,
tc.is_deferrable,tc.initially_deferred
FROM
information_schema.table_constraints AS tc
JOIN information_schema.key_column_usage AS kcu ON tc.constraint_name = kcu.constraint_name
JOIN information_schema.constraint_column_usage AS ccu ON ccu.constraint_name = tc.constraint_name
WHERE constraint_type ='FOREIGN KEY'AND tc.table_catalog ='xxx';
4.表、视图权限
-- xxx :用户名select'ALTER TABLE '|| table_name ||' OWNER TO xxx;'from information_schema.tableswhere table_schema='public';select'ALTER FUNCTION '|| routine_name ||' OWNER TO xxx;'from information_schema.routines where specific_schema ='public'ORDERBY routine_name;