可在此处查看从 PostgreSQL 迁移到 ClickHouse 的完整指南,其中包括有关数据建模和对应概念的建议。以下将介绍如何连接 ClickHouse 和 PostgreSQL。本页介绍将 PostgreSQL 与 ClickHouse 集成的以下几种方式:
- 使用
PostgreSQL表引擎读取 PostgreSQL 表中的数据 - 使用 Experimental
MaterializedPostgreSQL数据库引擎,将 PostgreSQL 中的数据库与 ClickHouse 中的数据库保持同步
使用 PostgreSQL 表引擎
PostgreSQL 表引擎允许在 ClickHouse 中对存储于远程 PostgreSQL 服务器上的数据执行 SELECT 和 INSERT 操作。
本文以单个表为例,说明集成的基本方法。
1. 配置 PostgreSQL
- 在
postgresql.conf中添加以下配置项,使 PostgreSQL 监听网络接口:
- 创建一个供 ClickHouse 连接使用的用户。为便于演示,此示例授予其完整的超级用户权限。
- 在 PostgreSQL 中创建一个新数据库:
- 创建新表:
- 添加几行数据来测试:
- 要将 PostgreSQL 配置为允许新用户出于复制目的连接到新数据库,请将以下条目添加到
pg_hba.conf文件中。请将地址行更新为你的 PostgreSQL 服务器所在的子网或其 IP 地址:
- 重新加载
pg_hba.conf配置文件 (请根据你的版本调整此命令) :
- 验证新的
clickhouse_user是否能够登录:
如果你在 ClickHouse Cloud 中使用此功能,可能需要允许 ClickHouse Cloud 的 IP 地址访问你的 PostgreSQL 实例。
有关出站流量的详细信息,请参阅 ClickHouse Cloud Endpoints API。
2. 在 ClickHouse 中定义表
- 登录
clickhouse-client:
- 创建一个新的数据库:
- 创建一个使用
PostgreSQL的表:
| parameter | Description | example |
|---|---|---|
| host:port | 主机名或 IP 地址和端口 | postgres-host.domain.com:5432 |
| database | PostgreSQL 数据库名称 | db_in_psg |
| user | 用于连接 Postgres 的用户名 | clickhouse_user |
| password | 用于连接 Postgres 的密码 | ClickHouse_123 |
完整参数列表请参阅 PostgreSQL 表引擎 文档页面。
3 测试集成
- 在 ClickHouse 中,查看初始数据行:
- 回到 PostgreSQL,向表中添加几行数据:
- 这两行新数据应该会显示在你的 ClickHouse 表中:
- 我们来看看向 ClickHouse 表中添加行时会发生什么:
- 在 ClickHouse 中添加的行应会出现在 PostgreSQL 的表中:
PostrgeSQL 表引擎,在 PostgreSQL 与 ClickHouse 之间实现基础集成。
请查看 PostgreSQL 表引擎文档页面,了解更多功能,例如指定 schema、仅返回部分列,以及连接多个副本。另请参阅博客 ClickHouse and PostgreSQL - a match made in data heaven - part 1。
使用 MaterializedPostgreSQL 数据库引擎
1. 在 PostgreSQL 中
- 在
postgresql.conf中,设置最小监听级别、复制 wal level 和 replication slots:
logical,并至少配置 2 个 replication slot
- 使用管理员账户,创建一个供 ClickHouse 连接使用的用户:
- 创建一个新数据库:
- 在
psql中连接到新的数据库:
- 创建新表:
- 插入初始行:
- 配置 PostgreSQL,允许新用户连接到新数据库以进行复制。下面是需要添加到
pg_hba.conf文件中的最简条目:
- 重新加载
pg_hba.conf配置,类似如下 (请根据你的版本调整) :
- 使用新的
clickhouse_user测试登录:
2. 在 ClickHouse 中
- 登录 ClickHouse 命令行客户端
- 为该数据库引擎启用 PostgreSQL Experimental 功能:
- 创建要启用复制的新数据库,并定义初始表:
| parameter | Description | example |
|---|---|---|
| host:port | 主机名或 IP 地址及端口 | postgres-host.domain.com:5432 |
| database | PostgreSQL 数据库名称 | db1 |
| user | 用于连接到 Postgres 的用户名 | clickhouse_user |
| password | 用于连接到 Postgres 的密码 | ClickHouse_123 |
| settings | 引擎的其他设置 | materialized_postgresql_tables_list = ‘table1’ |
有关 PostgreSQL 数据库引擎的完整指南,请参阅 https://clickhouse.com/docs/engines/database-engines/materialized-postgresql/#settings
- 验证初始表中是否已有数据:
3. 测试基本复制功能
- 在 PostgreSQL 中插入新行:
- 在 ClickHouse 中,验证是否可以看到新行:
4. 总结
有关高级选项提供的更多功能,请参阅参考文档。