pgl_ddl_deploy

使用 pglogical 执行自动 DDL 部署

概览

扩展包名版本分类许可证语言
pgl_ddl_deploy2.2.1ETLMITC
ID扩展名BinLibLoadCreateTrustReloc模式
9520pgl_ddl_deploypgl_ddl_deploy
相关扩展pglogical pglogical_origin pglogical_ticker ddlx pg_permissions pg_failover_slots pgactive wal2json decoderbufs

版本

类型仓库版本PG 大版本包名依赖
EXTPGDG2.2.11817161514pgl_ddl_deploypglogical
RPMPGDG2.2.11817161514pgl_ddl_deploy_$vpglogical_$v
DEBPGDG2.2.11817161514postgresql-$v-pgl-ddl-deploypostgresql-$v-pglogical
OS / PGPG18PG17PG16PG15PG14
el8.x86_64PGDG MISS
el8.aarch64PGDG MISS
el9.x86_64PGDG MISS
el9.aarch64PGDG MISS
el10.x86_64PGDG MISS
el10.aarch64PGDG MISS
d12.x86_64PGDG MISS
PGDG 2.2.1
PGDG 2.2.1
PGDG 2.2.1
PGDG 2.2.1
d12.aarch64PGDG MISS
PGDG 2.2.1
PGDG 2.2.1
PGDG 2.2.1
PGDG 2.2.1
d13.x86_64PGDG MISS
PGDG 2.2.1
PGDG 2.2.1
PGDG 2.2.1
PGDG 2.2.1
d13.aarch64PGDG MISS
PGDG 2.2.1
PGDG 2.2.1
PGDG 2.2.1
PGDG 2.2.1
u22.x86_64PGDG MISS
PGDG 2.2.1
PGDG 2.2.1
PGDG 2.2.1
PGDG 2.2.1
u22.aarch64PGDG MISS
PGDG 2.2.1
PGDG 2.2.1
PGDG 2.2.1
PGDG 2.2.1
u24.x86_64PGDG MISS
PGDG 2.2.1
PGDG 2.2.1
PGDG 2.2.1
PGDG 2.2.1
u24.aarch64PGDG MISS
PGDG 2.2.1
PGDG 2.2.1
PGDG 2.2.1
PGDG 2.2.1

安装

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

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

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

pig install pgl_ddl_deploy;          # 当前活跃 PG 版本安装
pig ext install -y pgl_ddl_deploy -v 17  # PG 17
pig ext install -y pgl_ddl_deploy -v 16  # PG 16
pig ext install -y pgl_ddl_deploy -v 15  # PG 15
pig ext install -y pgl_ddl_deploy -v 14  # PG 14
dnf install -y pgl_ddl_deploy_17       # PG 17
dnf install -y pgl_ddl_deploy_16       # PG 16
dnf install -y pgl_ddl_deploy_15       # PG 15
dnf install -y pgl_ddl_deploy_14       # PG 14
apt install -y postgresql-17-pgl-ddl-deploy   # PG 17
apt install -y postgresql-16-pgl-ddl-deploy   # PG 16
apt install -y postgresql-15-pgl-ddl-deploy   # PG 15
apt install -y postgresql-14-pgl-ddl-deploy   # PG 14

创建扩展

CREATE EXTENSION pgl_ddl_deploy CASCADE;  -- 依赖: pglogical

用法

pgl_ddl_deploy: 使用 pglogical 自动化 DDL 部署

支持 pglogical 和原生逻辑复制的 PostgreSQL 9.5+ 透明 DDL 复制。自动将 DDL 变更(CREATE TABLE、ALTER TABLE 等)传播到订阅者。

启用

CREATE EXTENSION pgl_ddl_deploy;

配置

pgl_ddl_deploy.set_configs 表中插入配置:

-- 复制所有用户模式的 DDL 并自动添加新表
INSERT INTO pgl_ddl_deploy.set_configs (set_name, include_schema_regex, driver)
VALUES ('default', '.*', 'native'::pgl_ddl_deploy.driver);

-- 或使用 pglogical 驱动
INSERT INTO pgl_ddl_deploy.set_configs (set_name, include_schema_regex, driver)
VALUES ('default', '.*', 'pglogical'::pgl_ddl_deploy.driver);

-- 仅维护已在复制中的特定表(仅 ALTER TABLE)
INSERT INTO pgl_ddl_deploy.set_configs (set_name, include_only_repset_tables, driver)
VALUES ('my_tables', TRUE, 'native'::pgl_ddl_deploy.driver);

部署事件触发器

配置后,部署事件触发器:

SELECT pgl_ddl_deploy.deploy(set_config_id) FROM pgl_ddl_deploy.set_configs;

关键配置选项

  • drivernativepglogical
  • set_name:发布名称或 pglogical 复制集名称
  • include_schema_regex:匹配 DDL 复制模式的正则表达式
  • include_only_repset_tables:为 true 时,仅对已在复制中的表执行 ALTER TABLE
  • lock_safe_deployment:为 true 时,DDL 在订阅者上以低 lock_timeout 循环执行
  • allow_multi_statements:为 true 时,可以传播多语句 DDL
  • queue_subscriber_failures:为 true 时,订阅者上失败的 DDL 会排队重试
  • ddl_only_replication:仅复制模式,不自动将表添加到数据复制

监控

-- 查看未处理的 DDL 事件
SELECT * FROM pgl_ddl_deploy.unhandled;

-- 查看订阅者失败的 DDL
SELECT * FROM pgl_ddl_deploy.subscriber_logs WHERE NOT succeeded;

-- 在订阅者上重试失败的 DDL
SELECT pgl_ddl_deploy.retry_all_subscriber_logs();

检查已解析的模式

SELECT pgl_ddl_deploy.resolved_regex_include_schemas(set_config_id)
FROM pgl_ddl_deploy.set_configs;

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