Skip to main content
你可以按这条路径自行操作,把它写成脚本,或交给 AI 智能体处理。如需查看控制台版本,请切换到 Cloud UI 视图。本页介绍如何仅通过命令行,使用 ClickHouse 命令行客户端 (clickhousectl) 和 psql 完成 ClickHouse Managed Postgres 的预配、数据加载、将数据复制到 ClickHouse 以及查询。命令均为非交互式;clickhousectl 可通过 --json 输出 JSON。

前置条件

安装 ClickHouse 命令行客户端:
你还需要 psql (PostgreSQL 客户端工具;在 macOS 上,使用 brew install libpq) 和 jq写操作 (创建、删除) 需要通过 API key 身份验证;OAuth 登录仅支持只读访问:
或者,设置 CLICKHOUSE_CLOUD_API_KEYCLICKHOUSE_CLOUD_API_SECRET 环境变量。可使用 clickhousectl cloud auth status 进行验证;应看到一条作用域为 read/write 的条目。

第 1 部分:创建 Postgres 并加载数据

创建 Postgres 服务

创建该服务并保存返回结果;密码仅显示一次:
返回结果中包含服务 ID、主机名以及可直接使用的连接字符串:
提取本指南后续部分所需的信息:
如果密码遗失,请使用 clickhousectl cloud postgres reset-password $PG_ID --generate 生成新密码。

等待服务预配完成

预配需要几分钟。持续轮询,直到状态变为 running

加载示例数据

创建两个表,并通过 psql 插入 100 万条事件:
得益于 NVMe 存储,在 c6gd.large (最小规格) 上插入 100 万行数据大约只需 7 秒。可通过查询验证;由于数据是用 random() 生成的,每次运行得到的行数可能会有所不同:

第 2 部分:复制到 ClickHouse

创建 ClickHouse 服务

在同一区域创建一个服务并保存响应;密码仅会显示在创建时返回的响应中:
等待其进入运行状态;ClickPipe 需要一个处于运行状态的目标端:
若要改用现有服务,请将 CH_ID 设置为 clickhousectl cloud service list 中显示的值,并将 CH_PASSWORD 设置为该服务 default 用户的密码,pg_clickhouse 步骤需要用到它。

将表复制到 ClickHouse

在 ClickHouse 服务上创建一个 Postgres CDC ClickPipe,并将其指向 Managed Postgres 的主机名。该管道会先复制现有行,然后持续将后续变更同步到 ClickHouse:
注意:
  • 复制表会落在 ClickHouse 服务的 default 数据库中,名称由 --table-mapping 的目标决定
  • publication 和 replication slot 会自动创建,其中 publication 的作用范围仅限于映射的表;传入 --publication-name 可改用你自行管理的 publication
  • 请直接使用 Postgres 主机名;不支持通过 PgBouncer 进行复制

等待管道进入 Running 状态

管道在进入 Running 之前,会依次经过 ProvisioningSetup,以及 (对于较大的表) Snapshot 状态。在一个服务上创建的第一个管道通常需要约 4 分钟。FailedInternalError 为终态:

在 ClickHouse 中查询复制的数据

直接通过命令行客户端向 ClickHouse 服务执行 SQL。首次调用会自动预配一个 Query API 端点和一个服务级作用域的 API 密钥:
Postgres 中的新写入会持续复制。插入一行,然后轮询,直到计数达到 1,000,001 (通常不到一分钟) :

从 Postgres 查询 ClickHouse

pg_clickhouse 扩展可让 Postgres 作为事务型数据和分析型数据的统一查询层。获取 ClickHouse 的 HTTPS 主机名,然后通过 psql 配置该扩展:
这里特意不给 heredoc 加引号,这样 shell 就会在 SQL 到达 Postgres 之前先替换 $CH_HOST$CH_PASSWORD。现在,这些复制表会在 organization schema 中显示为 foreign tables;对它们发起的查询实际上会在 ClickHouse 中执行。在使用该数据集的 c6gd.large 上测得,通过 foreign tables 运行分析查询的速度可提升 6-9 倍 (例如,一个包含 5 个聚合的 GROUP BY:通过 ClickHouse 为 176 ms,本地执行为 1,133 ms;一个带聚合的 JOIN:298 ms,而本地为 2,764 ms) 。

清理

请先删除 ClickPipe,再删除 Postgres 服务。删除服务会永久清除其中的所有数据:
运行中的 ClickHouse 服务无法直接删除。请先将其停止,等待状态变为 stopped,然后再删除:
最后修改于 2026年7月24日