logical_ddl
在 PostgreSQL 逻辑复制中复制受支持的 DDL 变更
仓库
samedyildirim/logical_ddl
https://github.com/samedyildirim/logical_ddl
源码
logical_ddl-0.1.0.tar.gz
logical_ddl-0.1.0.tar.gz
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
logical_ddl | 0.1.0 | ETL | MIT | C |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 9530 | logical_ddl | 否 | 是 | 否 | 是 | 否 | 否 | logical_ddl |
Pigsty carries the upstream RAISE WARNING typo fix for 0.1.0.
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | PIGSTY | 0.1.0 | 1817161514 | logical_ddl | - |
| RPM | PIGSTY | 0.1.0 | 1817161514 | logical_ddl_$v | - |
| DEB | PIGSTY | 0.1.0 | 1817161514 | postgresql-$v-logical-ddl | - |
构建
您可以使用 pig build 命令构建 logical_ddl 扩展的 RPM / DEB 包:
pig build pkg logical_ddl # 构建 RPM / DEB 包
安装
您可以直接安装 logical_ddl 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
pig repo add pgsql -u # 添加仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install logical_ddl; # 当前活跃 PG 版本安装
pig ext install -y logical_ddl -v 18 # PG 18
pig ext install -y logical_ddl -v 17 # PG 17
pig ext install -y logical_ddl -v 16 # PG 16
pig ext install -y logical_ddl -v 15 # PG 15
pig ext install -y logical_ddl -v 14 # PG 14
dnf install -y logical_ddl_18 # PG 18
dnf install -y logical_ddl_17 # PG 17
dnf install -y logical_ddl_16 # PG 16
dnf install -y logical_ddl_15 # PG 15
dnf install -y logical_ddl_14 # PG 14
apt install -y postgresql-18-logical-ddl # PG 18
apt install -y postgresql-17-logical-ddl # PG 17
apt install -y postgresql-16-logical-ddl # PG 16
apt install -y postgresql-15-logical-ddl # PG 15
apt install -y postgresql-14-logical-ddl # PG 14
创建扩展:
CREATE EXTENSION logical_ddl;
用法
来源:README
logical_ddl 会捕获一组受限的 ALTER TABLE 变更,将其写入可复制的 shadow table,并在 logical replication 的 subscriber 上回放等价 DDL。
支持的 DDL
ALTER TABLE ... RENAME TO ...ALTER TABLE ... RENAME COLUMN ... TO ...ALTER TABLE ... ADD COLUMN ...ALTER TABLE ... ALTER COLUMN ... TYPE ...ALTER TABLE ... DROP COLUMN ...
内建类型、arrays、composite types、domains 与 enums 可以作为列类型使用,但该扩展不会复制这些自定义类型本身的定义。
发布端与订阅端设置
CREATE EXTENSION logical_ddl;
-- Publisher
INSERT INTO logical_ddl.settings VALUES (true, 'source1');
INSERT INTO logical_ddl.publish_tablelist (relid) VALUES ('table1'::regclass);
ALTER PUBLICATION log_pub_1 ADD TABLE logical_ddl.shadow_table;
-- Subscriber
INSERT INTO logical_ddl.settings VALUES (false, 'source1');
INSERT INTO logical_ddl.subscribe_tablelist (source, relid)
VALUES ('source1', 'table1'::regclass);
ALTER SUBSCRIPTION log_sub_1 REFRESH PUBLICATION;
主要表
logical_ddl.settings:声明当前节点是 publisher 还是 subscriber,以及 source name。logical_ddl.publish_tablelist:定义要捕获的表与命令类型。logical_ddl.subscribe_tablelist:定义要回放的目标表与命令类型。logical_ddl.shadow_table:复制用的命令日志。logical_ddl.applied_commands:回放历史与失败跟踪。
注意事项
- 该扩展在 superuser 权限下工作。
- 类型变更的
USING表达式、default expressions、constraints 与 indexes 均未实现。 - Pigsty 提到上游在
0.1.0修复了一个RAISE WARNING拼写错误,但这不影响这里记录的用户用法。