前置条件
- 能够使用具有复制权限的用户访问源 PostgreSQL 数据库。请按照与您的数据源对应的设置指南进行配置:
- 准备一个 ClickHouse Managed Postgres 服务作为迁移目标。如果您还没有,请参阅快速入门。
- 在本地计算机上安装
pg_dump和psql。两者都包含在标准 PostgreSQL 客户端工具中。
迁移前注意事项
- DDL 传播:持续复制 (CDC) 会捕获 DML 操作和
ADD COLUMN。其他 DDL 更改 (如DROP COLUMN和ALTER COLUMN) 不会自动传播,必须在目标端手动执行。
如果您在迁移过程中遇到问题,请查看 Managed Postgres Migrations FAQ,了解常见错误及其解决方案。
步骤 1:连接到源数据库
打开 ClickHouse Cloud 控制台,选择您的 Managed Postgres 服务。 在左侧边栏中,点击 数据源。 点击 开始导入。 填写源 PostgreSQL 数据库的连接信息:主机、端口、用户名、密码和数据库名称。如果源数据库要求使用 TLS,请启用该选项。 如果您需要通过私网连接访问源数据库,可以选择 SSH 隧道 并提供所需的 SSH 信息。这样,迁移便可安全连接到无法从公网访问的数据库。 选择一种摄取方式:- 初始加载 + CDC — 先复制现有数据,然后持续将后续变更同步到目标端。
- 仅初始加载 — 一次性复制,不进行持续复制。
- 仅 CDC — 跳过初始复制,仅复制从此刻开始产生的新变更。
自动 schema 迁移
选择此选项后,ClickPipe 会在创建完成后的 Setup 阶段 自动获取源数据库的 schema,并将其应用到您的 Managed Postgres 服务。 此功能要求目标数据库为空,因为无论您稍后在向导中选择哪些表,它都会从源数据库获取所有数据库对象。如果目标数据库中已有数据,或需要更灵活的自定义配置,则必须改用 手动 模式。 从下拉列表中选择目标数据库,或单击创建新数据库来预配一个数据库。监控
您可以在 ClickPipes 详情视图中跟踪 schema 迁移进度。日志会显示 schema 迁移的状态,以及过程中遇到的任何错误。 此模式存在以下限制:- 使用 SSH 隧道的管道无法使用自动 schema 迁移。必须手动导出和导入 schema。
手动 schema 迁移
如果目标数据库中已有数据,或者希望采用比自动模式所要求的全新环境更灵活的自定义设置,可以在此选择 手动 模式。导出数据库 schema
向导会显示一条已预填源连接信息的pg_dump 命令。在终端中运行它:
pg.sql。
点击 下一步。
将 schema 导入您的 Managed Postgres 服务
从下拉列表中选择目标数据库,或点击 创建新数据库 来创建新数据库。 向导会显示一条psql 命令,用于将 schema 转储导入您的 Managed Postgres 服务。在终端中运行它:
Step 4: 配置摄取设置
指定用于逻辑复制的 publication。将此项留空时,系统会自动创建 publication。 展开 高级复制设置 以调整吞吐量:
点击 下一步。
第 5 步:选择表
选择要复制的表。表会按 schema 分组显示。你可以选择单个表,也可以展开某个 schema,一次性选择其中的所有表。 点击 Create migration。监控迁移
创建迁移后,你会在数据源中看到它,状态为 运行中。 点击该迁移以打开详情视图。Tables 选项卡会显示每个表的初始加载进度,包括已处理的行数、分区数,以及每个分区的平均耗时。Metrics 选项卡则会在 CDC 开始后显示复制延迟和吞吐量。切换流量
初始加载完成后 (如果使用 CDC,还需确保复制延迟接近零) ,即可将流量从源 Postgres 数据库切换到 Managed Postgres 服务。打开迁移详情视图,选择 Post-migration steps 选项卡。该向导会引导你完成安全收尾迁移所需的六个步骤。每一步都必须按顺序完成,之后才能进入下一步。步骤 1:将源 Postgres 数据库设置为只读模式
停止应用程序对源库的写入,确保在 cutover 期间数据不会出现分叉。向导会显示一条已预填源数据库名称的ALTER DATABASE 命令 —— 请在源数据库上执行该命令:
该步骤的具体操作可能因所用的 Postgres 提供商而异。托管服务可能会限制
ALTER DATABASE 或终止 backend 等操作,转而通过自身的 Console、parameter group 或撤销写入特权来启用只读模式。请查阅您所用提供商的文档,了解将源端设为只读的等效方式。步骤 2:校验行数
选择需要校验的复制表。ClickPipes 会分别统计源端和目标端中每个所选表的行数并进行比较。大表可能返回近似行数。使用 Select all tables 校验所有表,或搜索特定表并将其勾选,然后点击 Count rows。步骤 3:暂停管道
暂停 ClickPipe,使复制停止,之后再重置序列并切换流量。点击 Pause ClickPipe,等待管道进入暂停状态后再继续。步骤 4:重置序列
在目标端重置序列,使后续插入能够从正确的值继续。点击 Reset sequences,将每个序列对齐到其所在表中的当前最大值。步骤 5:切换流量
将应用程序的数据库 URL 更新为 Managed Postgres 的连接字符串,从而把读写流量指向你的 Managed Postgres 服务。向导以 url、psql、env、yaml 和 jdbc 等多种格式提供连接信息,你可以复制与自身技术栈相匹配的那一种。更新应用程序后,点击 Mark as completed。步骤 6:清理
完成切换并确认新 service 健康状况正常后,请删除该 migration 并释放源端资源。向导会显示一条已预先填好 slot 名称的pg_drop_replication_slot 命令 —— 在源端运行该命令即可删除 replication slot: