PG版本: PostgreSQL 11.11 存储过程: create or replace function get_tab_ddl(tab_name varchar)returns text as $$declare --定义变量 tab_ddl text; curs refcursor; tmp_col record; tab_info record;begin --获取表的pid、schema信息 open curs for SELECT c.oid,n.nspname,c.relname FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE c.relname ~ ('^('||tab_name||')$')AND pg_catalog.pg_table_is_visible(c.oid) ORDER BY 2,3; fetch curs into tmp_col; --判断是否存在该表 if tmp_col.oid is null then return 'Table "'||tab_name||'" was not queried'; end if; --如表存在,获取表的列信息 FOR tab_info IN SELECT a.attname as col_name, pg_catalog.format_type(a.atttypid, a.atttypmod) as col_type, CASE WHEN (SELECT substring(pg_catalog.pg_get_expr(d.adbin, d.adrelid) for 128) FROM pg_catalog.pg_attrdef d WHERE d.adrelid = a.attrelid AND d.adnum = a.attnum AND a.atthasdef) IS NOT NULL THEN 'DEFAULT '|| (SELECT substring(pg_catalog.pg_get_expr(d.adbin, d.adrelid) for 128) FROM pg_catalog.pg_attrdef d WHERE d.adrelid = a.attrelid AND d.adnum = a.attnum AND a.atthasdef) ELSE '' END as col_default_value, CASE WHEN a.attnotnull = true THEN 'NOT NULL' ELSE 'NULL' END as col_not_null, a.attnum as attnum, e.max_attnum as max_attnum FROM pg_catalog.pg_attribute a INNER JOIN (SELECT a.attrelid, max(a.attnum) as max_attnum FROM pg_catalog.pg_attribute a WHERE a.attnum > 0 AND NOT a.attisdropped GROUP BY a.attrelid) e ON a.attrelid=e.attrelid WHERE a.attnum > 0 AND a.attrelid=tmp_col.oid AND NOT a.attisdropped ORDER BY a.attnum --拼接为ddl语句 LOOP IF tab_info.attnum = 1 THEN tab_ddl:='CREATE TABLE '||tmp_col.nspname||'.'||tmp_col.relname||' ('; ELSE tab_ddl:=tab_ddl||','; END IF; IF tab_info.attnum <= tab_info.max_attnum THEN tab_ddl:=tab_ddl||chr(10)||' '||tab_info.col_name||' '||tab_info.col_type||' '||tab_info.col_default_value||' '||tab_info.col_not_null; END IF; END LOOP; tab_ddl:=tab_ddl||');'; --输出结果 RETURN tab_ddl;end;$$ language plpgsql; 用法: select get_tab_ddl('table_name');
PostgreSQL获取建表语句存储过程
来源:这里教程网
时间:2026-03-14 20:18:33
作者:
编辑推荐:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- PG12中新增:VACUUM命令的SKIP_LOCKED选项
PG12中新增:VACUUM命令的SKIP_LOCKED选项
26-03-14 - 1.1 Logical Structure of Database Cluster
- CentOS 7.8安装PostgreSQL(生产系统)
CentOS 7.8安装PostgreSQL(生产系统)
26-03-14 - 1.2 Physiacel Structure of Database Cluster
- Spring整合Activiti,在瀚高数据库初始化时指定schema解决方案
- PostgreSQL的xlog/Wal归档及日志清理
PostgreSQL的xlog/Wal归档及日志清理
26-03-14 - PostgreSQL的两个模板库
PostgreSQL的两个模板库
26-03-14 - 模型思维(01)
模型思维(01)
26-03-14 - postgreSQL数据库同步流复制和异步流复制控制
postgreSQL数据库同步流复制和异步流复制控制
26-03-14 - PostgreSQL中的触发器
PostgreSQL中的触发器
26-03-14
