PostgreSQL
关于从 PostgreSQL 迁移到 ClickHouse 的完整指南(包括数据建模建议和等价概念说明)可以在此处查阅。下面将介绍如何连接 ClickHouse 和 PostgreSQL。
将 ClickHouse 连接到 PostgreSQL
本页介绍以下几种将 PostgreSQL 与 ClickHouse 集成的方式:
- 使用
PostgreSQL表引擎,从 PostgreSQL 表中读取数据 - 使用试验性的
MaterializedPostgreSQL数据库引擎,将 PostgreSQL 中的数据库与 ClickHouse 中的数据库进行同步
我们推荐使用由 PeerDB 提供支持的 ClickPipes,这是一项 ClickHouse Cloud 的托管集成服务。 或者,你也可以使用 PeerDB,它是一个专门为将 PostgreSQL 数据库复制到自托管 ClickHouse 和 ClickHouse Cloud 而设计的开源 CDC 工具。
使用 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 | 用于连接 PostgreSQL 的用户名 | clickhouse_user |
| password | 用于连接 PostgreSQL 的密码 | ClickHouse_123 |
查看 PostgreSQL 表引擎 文档页面以获取完整的参数列表。
3 测试集成
- 在 ClickHouse 中查看初始数据行:
ClickHouse 表会自动填充上此前在 PostgreSQL 表中已存在的两行记录:
- 回到 PostgreSQL,向表中再添加几行记录:
- 这两条新记录现在应该已经出现在您的 ClickHouse 表中:
响应应如下:
- 我们来看看向 ClickHouse 表中插入数据时会发生什么:
- 在 ClickHouse 中新增的行应当出现在 PostgreSQL 的表中:
本示例演示了使用 PostrgeSQL 表引擎在 PostgreSQL 和 ClickHouse 之间进行基础集成。
请参阅 PostgreSQL 表引擎的文档页面,了解更多功能,例如指定 schema、仅返回部分列以及连接到多个副本。另请参阅博客文章:ClickHouse and PostgreSQL - a match made in data heaven - part 1。
使用 MaterializedPostgreSQL 数据库引擎
PostgreSQL 数据库引擎利用 PostgreSQL 的复制功能来创建该数据库的副本,副本中可以包含全部或部分 schema 和表。 本文通过一个数据库、一个 schema 和一张表来演示基本的集成方法。
在以下步骤中,将使用 PostgreSQL 命令行客户端 (psql) 和 ClickHouse 命令行客户端 (clickhouse-client)。PostgreSQL 服务器安装在 Linux 上。下面给出的配置是针对全新测试安装的 PostgreSQL 数据库的最小配置。
1. 在 PostgreSQL 中
- 在
postgresql.conf中,设置基本的监听参数、WAL 复制级别以及复制槽:
添加如下条目:
ClickHouse 至少需要 logical 的 wal 级别,并且至少需要 2 个复制槽
- 使用管理员账户创建一个供 ClickHouse 连接使用的用户:
*出于演示目的,已授予完整的超级用户权限。
- 创建新数据库:
- 在
psql中连接到新数据库:
- 创建新表:
- 添加初始数据行:
- 配置 PostgreSQL,允许使用新用户连接到新数据库以进行复制。下面是在
pg_hba.conf文件中需要添加的最小必要条目:
*出于演示目的,此处使用明文密码身份验证方式。请按照 PostgreSQL 文档,将地址行更新为相应的子网或服务器地址
- 使用类似下面的命令重新加载
pg_hba.conf配置(根据你的版本进行调整):
- 使用新的
clickhouse_user账户测试登录:
2. 在 ClickHouse 中
- 登录到 ClickHouse CLI
- 为数据库引擎启用 PostgreSQL 实验性功能:
- 创建将要复制的新数据库并定义初始表:
最小必需选项:
| parameter | Description | example |
|---|---|---|
| host:port | 主机名或 IP 和端口 | postgres-host.domain.com:5432 |
| database | PostgreSQL 数据库名称 | db1 |
| user | 连接到 PostgreSQL 的用户名 | clickhouse_user |
| password | 连接到 PostgreSQL 的密码 | ClickHouse_123 |
| settings | 引擎的额外设置 | materialized_postgresql_tables_list = 'table1' |
有关 PostgreSQL 数据库引擎的完整指南,请参阅 https://clickhouse.com/docs/engines/database-engines/materialized-postgresql/#settings
- 验证初始表中是否有数据:
3. 测试基本复制
- 在 PostgreSQL 中添加新行:
- 在 ClickHouse 中确认新增的行是否可见:
4. 总结
本集成指南重点通过一个简单示例说明如何复制一个包含单个表的数据库,不过也有更高级的选项,例如复制整个数据库,或在现有复制基础上新增表和模式(schema)。虽然此复制方式不支持 DDL 命令,但可以将引擎配置为在发生结构性变更时检测更改并重新加载表。
有关高级选项可用的更多功能,请参阅参考文档。