ddlx

提取数据库对象的DDL

概览

扩展包名版本分类许可证语言
pg_ddlx0.30ADMINPostgreSQLSQL
ID扩展名BinLibLoadCreateTrustReloc模式
5080ddlx-
相关扩展pgdd pg_checksums pg_permissions pgextwlist pg_catcheck adminpack pg_repack pg_rewrite

版本

类型仓库版本PG 大版本包名依赖
EXTMIXED0.301817161514pg_ddlx-
RPMPIGSTY0.301817161514ddlx_$v-
DEBPIGSTY0.301817161514postgresql-$v-ddlx-
OS / PGPG18PG17PG16PG15PG14
el8.x86_64
el8.aarch64
el9.x86_64
el9.aarch64
el10.x86_64
el10.aarch64
d12.x86_64
d12.aarch64
d13.x86_64
d13.aarch64
u22.x86_64
u22.aarch64
PIGSTY 0.30
PIGSTY 0.30
PIGSTY 0.30
PIGSTY 0.30
PIGSTY 0.30
u24.x86_64
u24.aarch64
PIGSTY 0.30
PIGSTY 0.30
PIGSTY 0.30
PIGSTY 0.30
PIGSTY 0.30

构建

您可以使用 pig build 命令构建 pg_ddlx 扩展的 DEB 包:

pig build pkg pg_ddlx         # 构建 DEB 包

安装

您可以直接安装 pg_ddlx 扩展包的预置二进制包,首先确保 PGDGPIGSTY 仓库已经添加并启用:

pig repo add pgsql -u          # 添加仓库并更新缓存

使用 pig 或者是 apt/yum/dnf 安装扩展:

pig install pg_ddlx;          # 当前活跃 PG 版本安装
pig ext install -y pg_ddlx -v 18  # PG 18
pig ext install -y pg_ddlx -v 17  # PG 17
pig ext install -y pg_ddlx -v 16  # PG 16
pig ext install -y pg_ddlx -v 15  # PG 15
pig ext install -y pg_ddlx -v 14  # PG 14
dnf install -y ddlx_18       # PG 18
dnf install -y ddlx_17       # PG 17
dnf install -y ddlx_16       # PG 16
dnf install -y ddlx_15       # PG 15
dnf install -y ddlx_14       # PG 14
apt install -y postgresql-18-ddlx   # PG 18
apt install -y postgresql-17-ddlx   # PG 17
apt install -y postgresql-16-ddlx   # PG 16
apt install -y postgresql-15-ddlx   # PG 15
apt install -y postgresql-14-ddlx   # PG 14

创建扩展

CREATE EXTENSION ddlx;

用法

ddlx: DDL 提取函数

ddlx 是一个纯 SQL 扩展,可从 PostgreSQL 系统目录生成 DDL 脚本。它提供三个主要函数,接受 OID 参数,适用于所有 reg* 对象标识符类型。

核心函数

-- 为对象生成 CREATE 语句
SELECT ddlx_create('my_table'::regclass);
SELECT ddlx_create('my_type'::regtype);
SELECT ddlx_create('my_function'::regproc);
SELECT ddlx_create(current_role::regrole);

-- 生成 DROP 语句
SELECT ddlx_drop('my_table'::regclass);

-- 生成包含依赖树的完整 DDL 脚本
SELECT ddlx_script('my_table'::regclass);
SELECT ddlx_script('my_enum');
SELECT ddlx_script(current_role::regrole);

选项

选项以文本数组形式传递(例如 '{ine,nodcl}'):

SELECT ddlx_create('my_table'::regclass, '{ine}');        -- 添加 IF NOT EXISTS
SELECT ddlx_create('my_type'::regtype, '{noowner}');       -- 省略 ALTER SET OWNER
SELECT ddlx_script('my_table'::regclass, '{drop}');        -- 包含 DROP 语句

可用选项:dropnodropownernoownernograntsnodclnoalterine(IF NOT EXISTS)、ie(IF EXISTS)、extlitenowrapnopartitionscommentsnocommentsnostoragenoconstraintsnoindexesnosettingsnotriggersgrantordata

对于没有 reg* 类型的对象

SELECT ddlx_create(oid) FROM pg_foreign_data_wrapper WHERE fdwname = 'postgres_fdw';
SELECT ddlx_create(oid) FROM pg_database WHERE datname = current_database();

其他函数

-- 通过 OID 识别任意对象
SELECT * FROM ddlx_identify(oid);

-- 描述类的列
SELECT * FROM ddlx_describe('my_table'::regclass);

-- 获取各个定义部分
SELECT * FROM ddlx_definitions(oid);

-- 仅生成数据前创建语句
SELECT ddlx_createonly('my_table'::regclass);

-- 生成数据后修改语句
SELECT ddlx_alter('my_table'::regclass);

-- 通过正则表达式搜索函数/视图内容
SELECT ddlx_create(objid) FROM ddlx_apropos('users');

-- 获取 GRANT 语句
SELECT ddlx_grants('my_table'::regclass);

最后修改 2026-03-14: update extension metadata (953cbd0)