使用逻辑复制迁移到 Managed Postgres
本指南通过分步讲解说明如何使用 PostgreSQL 原生逻辑复制,将您的 PostgreSQL 数据库迁移到 ClickHouse Managed Postgres。
前置条件
- 能访问源 PostgreSQL 数据库。
- 在本地机器上已安装
psql、pg_dump和pg_restore。这些工具用于在目标数据库中创建空表。它们通常随 PostgreSQL 一起安装。如果没有,可以从 PostgreSQL 官方网站 下载。 - 源数据库必须能从 ClickHouse Managed Postgres 访问。请确保相关防火墙规则或安全组设置允许这种连通性。你可以通过如下方式获取 Managed Postgres 实例的出站 IP 地址(egress IP):
设置
要使逻辑复制正常工作,需要确保源数据库已正确配置。以下是关键要求:
- 源数据库的
wal_level必须设置为logical。 - 源数据库的
max_replication_slots必须至少设置为1。 - 对于 RDS(本指南将其作为示例),需要确保参数组中的
rds.logical_replication设置为1。 - 源数据库用户必须具有
REPLICATION权限。以 RDS 为例,需要运行:
确保你的源数据库按如下所示完成配置:

仅导出源数据库的 Schema(模式)
在设置逻辑复制之前,我们需要在目标 ClickHouse Managed Postgres 数据库中创建相应的 schema。我们可以通过使用 pg_dump 从源数据库生成仅包含 schema 的导出来完成此操作:
这里:
- 将
<user>、<password>、<host>、<port>和<database>替换为源数据库的凭据。 -s表示只导出 schema。--format directory指定以目录格式导出备份,该格式适用于pg_restore。-f rds-dump指定备份文件的输出目录。注意,此目录会被自动创建,且不应预先存在。
在本示例中,有两张表 —— events 和 users。events 有一百万行,users 有一千行。

创建 Managed Postgres 实例
首先,确保你已经创建了一个 Managed Postgres 实例,优先选择与源数据库位于同一区域的实例。你可以按照这里的快速指南进行操作。下面是我们在本指南中将要创建的实例配置:

将模式恢复到 ClickHouse Managed Postgres
现在我们已经有了模式转储文件,可以使用 pg_restore 将其恢复到我们的 ClickHouse Managed Postgres 实例中:
在这里:
- 将
<user>、<password>、<host>、<port>和<database>替换为目标 ClickHouse 托管版 Postgres 数据库的凭据。 --verbose会在恢复过程中输出详细信息。 此命令会在目标数据库中创建所有表、索引、视图和其他 schema 对象,但不会导入任何数据。
在我们的示例中,运行该命令后,我们得到了两个表,并且它们都是空的:

设置逻辑复制
在模式准备就绪后,我们就可以从源数据库到目标 ClickHouse Managed Postgres 数据库设置逻辑复制了。此过程包括在源数据库上创建 publication(发布),并在目标数据库上创建 subscription(订阅)。
在源数据库上创建发布(publication)
连接到源 PostgreSQL 数据库,并创建一个包含要复制的表的发布(publication)。
如果存在大量表,为所有表创建 publication(FOR ALL TABLES)可能会带来较大的网络开销。建议只指定需要复制的表。
在目标 ClickHouse Managed Postgres 数据库上创建订阅
接下来,连接到目标 ClickHouse Managed Postgres 数据库,并在其上创建一个订阅,用于连接源数据库上的发布。
这将在源数据库上自动创建一个复制槽,并开始将指定表中的数据复制到目标数据库。根据数据规模,此过程可能需要一些时间。
在我们的示例中,完成订阅配置后,数据就开始流入:

插入到源数据库的新行现在会以准实时的方式复制到目标 ClickHouse Managed Postgres 数据库中。
注意事项和考量
- 逻辑复制仅复制数据变更(INSERT、UPDATE、DELETE)。架构变更(如 ALTER TABLE)需要单独处理。
- 确保源数据库和目标数据库之间的网络连接稳定,以避免复制中断。
- 监控复制延迟,以确保目标数据库能够跟上源数据库的更新节奏。在源数据库上为
max_slot_wal_keep_size设置合适的值,有助于管理不断增长的复制槽位,并防止其占用过多磁盘空间。 - 根据具体使用场景,您可能还需要为复制过程配置监控和告警机制。
后续步骤
恭喜!您已使用 pg_dump 和 pg_restore 成功将 PostgreSQL 数据库迁移到 ClickHouse Managed Postgres。现在,您可以开始探索 Managed Postgres 的各项功能及其与 ClickHouse 的集成。以下是一个 10 分钟快速入门指南,帮助您开始使用: