本指南提供分步说明,介绍如何使用 pg_dump 和 pg_restore 实用工具将您的 PostgreSQL 数据库迁移至 ClickHouse Managed Postgres。
前置条件
- 可访问源 PostgreSQL 数据库。
- 在本地计算机上安装
pg_dump和pg_restore。这些工具通常会随 PostgreSQL 一同安装;如果没有,可从 PostgreSQL 官方网站 下载。
环境设置
为了完成这些步骤,我们以一个示例 RDS Postgres 数据库作为源数据库。大致如下:

我们要处理的内容包括:
- 两个表:
events和users。events有一百万行,users有一千行。 events上有一个索引。- 一个基于
events表的视图。 - 几个序列
创建源数据库的转储
现在我们使用 pg_dump 将上述对象导出为转储文件。命令很简单:
pg_dump \
-d 'postgresql://<user>:<password>@<host>:<port>/<database>' \
--format directory \
-f rds-dump这里:
- 将
<user>、<password>、<host>、<port>和<database>替换为你的源数据库凭据。大多数 Postgres 提供商都会提供一个可直接使用的连接字符串。 --format directory指定将转储保存为目录格式,这适用于pg_restore。-f rds-dump指定转储文件的输出目录。请注意,该目录会自动创建,因此在此之前不应已存在。- 你也可以添加
--jobs参数,并在后面指定要运行的并行作业数,以并行执行转储过程。更多详情,请参阅 pg_dump 文档。
以下是运行此命令后的效果:

将转储恢复到 ClickHouse Managed Postgres
现在我们已经有了转储文件,可以使用 pg_restore 将其恢复到 ClickHouse Managed Postgres 实例中。
创建 ClickHouse Managed Postgres 实例
首先,请确保你已创建好一个 ClickHouse Managed Postgres 实例,最好与源位于同一区域。你可以参考这里的快速入门指南。下面是本指南中将要创建的实例:

恢复转储
现在回到本地机器后,我们可以使用 pg_restore 命令将转储恢复到 ClickHouse Managed Postgres 实例:
pg_restore \
-d 'postgresql://<user>:<password>@<pg_clickhouse_host>:5432/<database>' \
--verbose \
rds-dump你可以在 ClickHouse Cloud 控制台中获取 ClickHouse Managed Postgres 实例的连接字符串,具体说明可参见这里。
这里也有几个需要注意的参数:
--verbose会在恢复过程中输出详细信息。- 你也可以在这里使用
--jobs参数并行执行恢复过程。更多详情,请参阅 pg_restore 文档。
在我们的示例中,命令如下所示:

验证迁移
恢复完成后,您可以连接到 ClickHouse Managed Postgres 实例,确认所有数据和对象都已成功迁移。您可以使用任意 PostgreSQL 客户端进行连接并执行查询。 以下是迁移完成后我们的 ClickHouse Managed Postgres 配置:

可以看到,所有表、索引、视图和序列都完好无损,数据量也一致。
注意事项
- 确保源数据库和目标数据库的 PostgreSQL 版本兼容。 使用比源服务器版本更旧的 pg_dump 可能会导致功能缺失或恢复问题。理想情况下,应使用与源数据库相同或更高主版本的 pg_dump。
- 大型数据库的转储和恢复可能需要相当长的时间。 请提前做好规划以尽量减少停机时间,并在支持的情况下考虑使用并行转储/恢复 (–jobs) 。
- 请注意,pg_dump / pg_restore 不会复制所有与数据库相关的对象或运行时状态。 这些包括角色及角色成员关系、replication slot、服务器级配置 (例如 postgresql.conf、pg_hba.conf) 、表空间,以及运行时统计信息。
后续步骤
恭喜!您已成功使用 pg_dump 和 pg_restore 将 PostgreSQL 数据库迁移到 ClickHouse Managed Postgres。现在,您可以开始探索 ClickHouse Managed Postgres 的功能及其与 ClickHouse 的集成。以下是一份 10 分钟快速入门,帮助您快速上手: