跳到主要内容
跳到主要内容

PostgreSQL

有关从 PostgreSQL 到 ClickHouse 的完整迁移指南,包括数据建模和等效概念的建议,请参阅 这里。以下描述了如何连接 ClickHouse 和 PostgreSQL。

将 ClickHouse 连接到 PostgreSQL

本页面涵盖了将 PostgreSQL 与 ClickHouse 集成的以下选项:

  • 使用 ClickPipes,为 ClickHouse Cloud 提供的自管理集成服务 - 目前处于私有预览阶段。请 在此注册
  • 使用 PeerDB by ClickHouse,一个专门为 PostgreSQL 数据库复制到自托管的 ClickHouse 和 ClickHouse Cloud 而设计的 CDC 工具
    • PeerDB 现在可以在 ClickHouse Cloud 原生使用 - 通过我们的 新 ClickPipe 连接器 实现闪电般快速的 Postgres 到 ClickHouse CDC - 目前处于私有预览阶段。请 在此注册
  • 使用 PostgreSQL 表引擎,从 PostgreSQL 表中读取数据
  • 使用实验性的 MaterializedPostgreSQL 数据库引擎,将 PostgreSQL 中的数据库与 ClickHouse 中的数据库同步

使用 ClickPipes(由 PeerDB 提供支持)

PeerDB 现在可以在 ClickHouse Cloud 原生使用 - 通过我们的 新 ClickPipe 连接器 实现闪电般快速的 Postgres 到 ClickHouse CDC - 目前处于私有预览阶段。请 在此注册

使用 PostgreSQL 表引擎

PostgreSQL 表引擎允许对存储在远程 PostgreSQL 服务器上的数据进行 SELECTINSERT 操作。 本文将说明使用一个表的基本集成方法。

1. 设置 PostgreSQL

  1. postgresql.conf 中添加以下条目,以启用 PostgreSQL 在网络接口上进行侦听:
  1. 创建一个用户以便从 ClickHouse 连接。为了演示目的,此示例授予完全超级用户权限。
  1. 在 PostgreSQL 中创建一个新的数据库:
  1. 创建一个新表:
  1. 为测试添加几行数据:
  1. 配置 PostgreSQL 以允许新用户连接到新数据库进行复制,在 pg_hba.conf 文件中添加以下条目。用您 PostgreSQL 服务器的子网或 IP 地址更新地址行:
  1. 重新加载 pg_hba.conf 配置(根据您的版本调整此命令):
  1. 验证新的 clickhouse_user 可以登录:
备注

如果您在 ClickHouse Cloud 中使用此功能,您可能需要允许 ClickHouse Cloud 的 IP 地址访问您的 PostgreSQL 实例。 请查看 ClickHouse Cloud 端点 API 以获取出站流量的详细信息。

2. 在 ClickHouse 中定义一个表

  1. 登录到 clickhouse-client
  1. 创建一个新的数据库:
  1. 创建一个使用 PostgreSQL 的表:

所需的最小参数为:

parameterDescriptionexample
host:porthostname 或 IP 和端口postgres-host.domain.com:5432
databasePostgreSQL 数据库名称db_in_psg
user用于连接 PostgreSQL 的用户名clickhouse_user
password用于连接 PostgreSQL 的密码ClickHouse_123
备注

查看 PostgreSQL 表引擎 文档页面以获取完整的参数列表。

3 测试集成

  1. 在 ClickHouse 中查看初始行:

ClickHouse 表应自动填充 PostgreSQL 表中已存在的两行:

  1. 返回 PostgreSQL,在表中添加几行数据:
  1. 这两行新数据应出现在您的 ClickHouse 表中:

返回结果应为:

  1. 让我们看看在 ClickHouse 表中添加行时发生了什么:
  1. 在 ClickHouse 中添加的行应出现在 PostgreSQL 的表中:

本示例演示了使用 PostgreSQL 表引擎在 PostgreSQL 和 ClickHouse 之间的基本集成。 请查看 PostgreSQL 表引擎的文档页面 了解更多功能,例如指定架构、仅返回部分列,以及连接到多个副本。还可以查看 ClickHouse 和 PostgreSQL - 数据天堂中的绝配 - 第一部分 博客。

使用 MaterializedPostgreSQL 数据库引擎

Not supported in ClickHouse Cloud
Experimental feature. Learn more.

PostgreSQL 数据库引擎利用 PostgreSQL 的复制功能创建一个数据库的副本,包含所有或部分架构和表。 本文将说明使用一个数据库、一个架构和一个表的基本集成方法。

在后面的流程中,使用 PostgreSQL CLI (psql) 和 ClickHouse CLI (clickhouse-client)。PostgreSQL 服务器安装在 Linux 上。如果 PostgreSQL 数据库是新的测试安装,以下是最小设置

1. 在 PostgreSQL 中

  1. postgresql.conf 中设置最小侦听级别、复制 wal 级别和复制槽:

添加以下条目:

*ClickHouse 需要最小的 logical wal 级别和最少 2 个复制槽

  1. 使用管理员帐户创建一个用户以便从 ClickHouse 连接:

*为了演示目的,授予了完全超级用户权限。

  1. 创建一个新数据库:
  1. psql 中连接到新数据库:
  1. 创建一个新表:
  1. 添加初始行:
  1. 配置 PostgreSQL 以允许新用户连接到新数据库进行复制。以下是添加到 pg_hba.conf 文件的最小条目:

*为了演示目的,这里使用纯文本密码认证方法。根据 PostgreSQL 文档更新地址行,使用子网或服务器地址。

  1. 使用如下命令重新加载 pg_hba.conf 配置(根据您的版本进行调整):
  1. 测试新的 clickhouse_user 登录:

2. 在 ClickHouse 中

  1. 登录到 ClickHouse CLI:
  1. 为数据库引擎启用 PostgreSQL 实验性功能:
  1. 创建新数据库以进行复制,并定义初始表:

最小选项:

parameterDescriptionexample
host:porthostname 或 IP 和端口postgres-host.domain.com:5432
databasePostgreSQL 数据库名称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

  1. 验证初始表具有数据:

3. 测试基本复制

  1. 在 PostgreSQL 中,添加新行:
  1. 在 ClickHouse 中,验证新行是否可见:

4. 总结

本集成指南集中于如何复制一个带有表的数据库的简单示例,然而,存在更多的高级选项,包括复制整个数据库或向现有复制中添加新表和架构。虽然此复制不支持 DDL 命令,但可以设置引擎以检测更改并在进行结构更改时重新加载表。

信息

有关高级选项可用的更多功能,请参见 参考文档.