本指南提供分步说明,介绍如何使用 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 实例中。
首先,请确保你已创建好一个 Managed Postgres 实例,最好与源位于同一区域。你可以参考这里的快速入门指南。下面是本指南中将要创建的实例:
现在回到本地机器后,我们可以使用 pg_restore 命令将转储恢复到 Managed Postgres 实例:
pg_restore \
-d 'postgresql://<user>:<password>@<pg_clickhouse_host>:5432/<database>' \
--verbose \
rds-dump
你可以在 ClickHouse Cloud 控制台中获取 Managed Postgres 实例的连接字符串,具体说明可参见这里。
这里也有几个需要注意的参数:
--verbose 会在恢复过程中输出详细信息。
- 你也可以在这里使用
--jobs 参数并行执行恢复过程。更多详情,请参阅 pg_restore 文档。
在我们的示例中,命令如下所示:
恢复完成后,您可以连接到 Managed Postgres 实例,确认所有数据和对象都已成功迁移。您可以使用任意 PostgreSQL 客户端进行连接并执行查询。
以下是迁移完成后我们的 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。现在,您可以开始了解 Managed Postgres 的各项功能,以及它与 ClickHouse 的集成方式。以下是一份 10 分钟的快速入门指南,帮助您快速上手: