前置条件
- 能够访问源 PostgreSQL 数据库。
- 在本地计算机上安装
psql、pg_dump和pg_restore。这些工具用于在目标数据库中创建空表,通常会随 PostgreSQL 一同安装。若未安装,可从 PostgreSQL 官方网站 下载。 - 源数据库必须可从 ClickHouse Managed Postgres 访问。请确保所需的防火墙规则或安全组 (Security Group) 设置允许此连接。你可以通过以下方式获取 Managed Postgres 实例的出口 IP:
设置
- 源数据库必须将
wal_level设置为logical。 - 源数据库必须将
max_replication_slots设置为至少1。 - 对于 RDS (本指南以其为例) ,你需要确保参数组中的
rds.logical_replication已设置为1。 - 源数据库用户必须具有
REPLICATION权限。对于 RDS,你需要运行: - 你用于目标数据库的角色必须对目标数据库对象具有写权限:
源数据库的纯 schema 转储
pg_dump 生成源数据库的纯 schema 转储:
- 将
<user>、<password>、<host>、<port>和<database>替换为源数据库的凭据。 -s表示我们只需要 schema 转储。--format directory表示我们希望转储采用目录格式,这种格式适用于pg_restore。-f rds-dump指定转储文件的输出目录。请注意,该目录会自动创建,因此事先不应存在。
events 和 users。events 有一百万行,users 有一千行。
创建 Managed Postgres 实例
将 schema 恢复到 ClickHouse Managed Postgres
pg_restore 将其恢复到 ClickHouse Managed Postgres 实例中:
- 将
<user>、<password>、<host>、<port>和<database>替换为目标 ClickHouse Managed Postgres 数据库的凭据。 --verbose会在恢复过程中提供详细输出。 此命令会在目标数据库中创建所有表、索引、视图及其他 schema 对象,但不会导入任何数据。
设置逻辑复制
在源数据库上创建 publication
如果表很多,创建涵盖所有表的 publication 可能会产生额外的网络开销。建议只指定需要复制的表。
在目标 ClickHouse Managed Postgres 数据库上创建订阅
注意事项与说明
- 逻辑复制仅复制数据变更 (INSERT、UPDATE、DELETE) 。schema 变更 (例如 ALTER TABLE) 需要单独处理。
- 确保源数据库与目标数据库之间的网络连接稳定,以避免复制中断。
- 监控复制延迟,确保目标数据库能够跟上源数据库的变化。在源数据库上为
max_slot_wal_keep_size设置合适的值,有助于管理不断增长的 replication slot,并防止其占用过多磁盘空间。 - 根据你的使用场景,你可能需要为复制过程配置监控和告警。