PostgreSQL
完整的 PostgreSQL 到 ClickHouse 的迁移指南,包括数据建模和等效概念的建议,可以在 这里 找到。以下是描述如何连接 ClickHouse 和 PostgreSQL 的内容。
将 ClickHouse 连接到 PostgreSQL
本页面涵盖将 PostgreSQL 与 ClickHouse 集成的以下选项:
- 使用 ClickPipes,这是由 PeerDB 提供支持的 ClickHouse Cloud 管理集成服务。
- 使用 PeerDB,一个专为 PostgreSQL 数据库复制到自托管 ClickHouse 和 ClickHouse Cloud 设计的开源 CDC 工具。
- 使用
PostgreSQL
表引擎,从 PostgreSQL 表中读取数据 - 使用实验性的
MaterializedPostgreSQL
数据库引擎,将 PostgreSQL 中的数据库与 ClickHouse 中的数据库同步
使用 PostgreSQL 表引擎
PostgreSQL
表引擎允许对存储在远程 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
的表:
所需的最小参数为:
参数 | 描述 | 示例 |
---|---|---|
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 的表中:
此示例演示了使用 PostgreSQL
表引擎将 PostgreSQL 和 ClickHouse 之间的基本集成。请查看 PostgreSQL 表引擎的文档页面 以获取更多功能,如指定架构、仅返回子集列以及连接多个副本。还可以查看 ClickHouse 和 PostgreSQL - 数据天堂中的完美搭档 - 第1部分 博客。
使用 MaterializedPostgreSQL 数据库引擎
PostgreSQL 数据库引擎使用 PostgreSQL 复制功能创建数据库的副本,包含所有或部分架构和表。 本文旨在说明使用一个数据库、一个架构和一个表的集成基本方法。
在以下过程中,将使用 PostgreSQL CLI(psql)和 ClickHouse CLI(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 实验性功能:
- 创建要复制的新数据库并定义初始表:
最小选项:
参数 | 描述 | 示例 |
---|---|---|
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. 总结
本集成指南专注于如何复制具有一个表的数据库的简单示例,但也存在更高级的选项,包括复制整个数据库或向现有复制中添加新表和架构。尽管 DDL 命令不支持此复制,但该引擎可以设置为检测更改,并在进行结构更改时重新加载表。
有关可用于高级选项的更多功能,请参见 参考文档.