pgl_ddl_deploy
使用 pglogical 执行自动 DDL 部署
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
pgl_ddl_deploy | 2.2.1 | ETL | MIT | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 9520 | pgl_ddl_deploy | 否 | 是 | 否 | 是 | 否 | 否 | pgl_ddl_deploy |
| 相关扩展 | pglogical pglogical_origin pglogical_ticker ddlx pg_permissions pg_failover_slots pgactive wal2json decoderbufs |
|---|
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PGDG | 2.2.1 | 1817161514 | pgl_ddl_deploy | pglogical |
| RPM | PGDG | 2.2.1 | 1817161514 | pgl_ddl_deploy_$v | pglogical_$v |
| DEB | PGDG | 2.2.1 | 1817161514 | postgresql-$v-pgl-ddl-deploy | postgresql-$v-pglogical |
安装
您可以直接安装 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
用法
支持 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;
关键配置选项
driver:native或pglogicalset_name:发布名称或 pglogical 复制集名称include_schema_regex:匹配 DDL 复制模式的正则表达式include_only_repset_tables:为 true 时,仅对已在复制中的表执行 ALTER TABLElock_safe_deployment:为 true 时,DDL 在订阅者上以低 lock_timeout 循环执行allow_multi_statements:为 true 时,可以传播多语句 DDLqueue_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;