Supabase Pipelines 怎么把 Postgres 变更复制到 ClickHouse 并配置权限?

发布时间:2026/9/10 6:03:10
Supabase Pipelines 怎么把 Postgres 变更复制到 ClickHouse 并配置权限? Supabase Pipelines 怎么把 Postgres 变更复制到 ClickHouse 并配置权限【免费下载链接】supabaseThe Postgres development platform. Supabase gives you a dedicated Postgres database to build your web, mobile, and AI applications.项目地址: https://gitcode.com/GitHub_Trending/supa/supabaseSupabase Pipelines 是托管的 CDC 产品基于 Postgres 逻辑复制把数据库变更从 Supabase Postgres 持续发送到目标系统。本文以 ClickHouse 为目标说明如何准备 ClickHouse 端资源与权限、配置复制目标并验证变更确实到达了 ClickHouse。适用前提Supabase Pipelines 目前处于 public alpha而 ClickHouse destination 处于 Early Access仅对通过审核的组织开放需要先申请 Early Access 权限再按本文操作ClickHouse 必须能通过公网 HTTPS 访问HTTP、localhost、私有或内网主机名均不被支持。准备 ClickHouse 资源与权限在创建 destination 之前在 ClickHouse 侧完成以下准备创建或选定一个用于承载复制表的 ClickHouse 数据库为 Pipelines 创建一个专用 ClickHouse 用户授予该用户目标数据库的访问权限。Pipelines 需要该用户能够查询system.databases、system.tables、system.columns创建、修改、truncate 和删除表使用ReplacingMergeTree时创建和删除视图向托管表插入数据复制该数据库的 HTTPS 端点需要时带上端口。Pipelines 会拒绝 HTTP 端点和私有/内网主机名。除上述对象外保持数据库空着复制表和 current-state 视图由 Pipelines 托管不要预先创建或手动修改这些对象否则可能导致表初始化或写入失败。版本要求默认的ReplacingMergeTree引擎要求 ClickHouse23.5 或更新版本MergeTree事件日志引擎没有最低版本要求。准备 Postgres publicationPipelines 复制哪些表和变更类型由 Postgres publication 定义。可以先用 SQL 创建之后在 Dashboard 中选择它。文档给出的示例假设数据库中有users和orders两张表-- 为指定表创建 publication create publication pub_users_orders for table users, orders;该 publication 会跟踪这两张表的所有变更INSERT、UPDATE、DELETE、TRUNCATE。其他可选写法包括按 schema 发布for tables in schema public、发布全部表for all tables、只发布部分列或按行过滤。FOR ALL TABLES会包含 Supabase 托管的 schema包括 Pipelines 内部创建的etl表除非你确实要复制库中所有符合条件的表否则建议用FOR TABLES IN SCHEMA public或显式列出应用表。对 ClickHouse 目标源表必须满足以下要求来自源表要求表场景是否支持要求ReplacingMergeTree表没有主键否添加源主键、把主键列全部加入 publication或改用MergeTree事件日志布局仅插入的MergeTree表没有主键是插入不需要行标识有主键的表是publication 必须包含每一个主键列使用主键 replica identity 的更新否改用REPLICA IDENTITY FULL使未改动的列值也能重建使用主键 replica identity 的删除是publication 必须包含所有主键列使用REPLICA IDENTITY FULL的更新或删除是full identity 提供更新所需的完整行镜像使用REPLICA IDENTITY USING INDEX的更新否改用REPLICA IDENTITY FULL使用REPLICA IDENTITY USING INDEX的删除有限仅当选定索引与源主键解析到相同列其他唯一索引不支持使用REPLICA IDENTITY NOTHING的更新或删除否删除需要主键或 full identity更新需要 full identity另外顶层 Postgres 数组列的元素可以可空但列本身不能为NULL——ClickHouse 的 RowBinary 格式无法编码顶层NULL数组。需要先把已有NULL值替换掉并将源列改为NOT NULL或保证生产者总是写入数组值空数组支持。在 Dashboard 配置 ClickHouse destinationManaged Pipelines 运行在AWSeu-central-1法兰克福无法更改。条件允许时把 ClickHouse 服务部署在靠近法兰克福的位置以减少网络延迟和复制延迟。配置步骤打开 Dashboard 的Database Replication点击Add destination选择ClickHouse。如果列表中没有说明组织尚未获得 Early Access需要先申请选择一个 Postgres publication输入 destination 名称填写 ClickHouse 设置URLHTTPS 端点需要时带端口User前面创建的专用 ClickHouse 用户Password如认证需要则填写该用户密码Database已存在的目标数据库Table engine选ReplacingMergeTree得到当前状态表或选MergeTree得到 append-only 事件日志点击Create and start pipeline。两种引擎的区别引擎数据模型源主键查询方式ReplacingMergeTree默认当前状态表必需查询生成的table__current视图MergeTreeAppend-only CDC 事件历史仅插入表可选查询基表ReplacingMergeTree下Pipelines 会用源主键作为 ClickHouse 的排序与去重键添加_etl_version UInt128排序列和_etl_deleted UInt8墓碑列并创建table__current视图对基表运行FINAL并过滤已删除行。MergeTree下则添加cdc_operationINSERT/UPDATE/DELETE和cdc_lsnPostgres 提交 LSN两个列。_etl_version、_etl_deleted、cdc_operation、cdc_lsn都是保留名源列不能使用这些名字。表名映射规则每个 Postgres schema.table 对应一张 ClickHouse 表已有的下划线会被翻倍schema 与表名之间用一个下划线连接。文档示例Postgres 表ClickHouse 表public.orderspublic_ordersmy_schema.logsmy__schema_logs复制到 ClickHouse 时Postgres schema 和表名不能以_开头或结尾也不能包含或;。验证复制结果在Database Replication页面目标会以列表形式出现先确认 pipeline 状态pipeline 状态为Running表示正在复制Failed时把鼠标悬停在状态上可看错误摘要点击View pipeline查看详细信息点击View pipeline进入状态页确认各表状态进入Live表示该表正在接收持续复制初始同步阶段会经历Queued→Copying→Copied→Live状态页的Waiting to sync表示尚未确认 flush 的 WAL 字节数Caught up表示该 slot 当前所有变更都已确认Slot status为Reserved/Extended属健康状态Unreserved和Lost需要处理。数据层面对ReplacingMergeTree目标查询生成的 current-state 视图。文档给出的示例表名按前面的映射规则得到select * from public_orders__current;注意在 ClickHouse 后台 merge 完成前直接不带FINAL查询基表可能返回同一源行的多个版本常规当前状态查询应使用__current视图。Pipelines 不会执行OPTIMIZE ... FINAL CLEANUP物理墓碑的清理由 ClickHouse 运维方按自己的存储保留策略负责。对MergeTree目标直接读取基表分析事件历史同一个 Postgres 事务中的多条变更会共享同一个cdc_lsn它不是唯一事件 ID也不是重建当前状态的总序。常见失败与对应处理ClickHouse 目标文档给出的排查表问题处理destination 列表中没有 ClickHouseEarly Access 期间该 destination 按组织灰度先申请访问权限URL 校验失败使用公网 ClickHouse HTTPS 端点并带端口HTTP、localhost、私有/内网端点不支持连接失败确认端点可从互联网访问用户名和密码正确数据库校验失败创建配置中指定的数据库并授予用户读取system.databases的权限校验通过但建表或写入失败按上文清单授予目标数据库权限检查是否存在与生成名冲突的表或视图不要手动修改托管对象ReplacingMergeTree初始化失败确认服务器为 ClickHouse 23.5 或更新且每张源表都有已发布的主键更新或删除失败更新使用REPLICA IDENTITY FULL删除可用主键 identity 或 full identity所有 identity 列都要包含在 publication 中可空数组复制失败替换顶层NULL数组值并将源列改为NOT NULL或保证生产者总是写入数组空数组支持schema 变更失败对照下方支持范围ClickHouse DDL 非事务性可能部分应用不要手动修复托管对象带 pipeline ID 和错误详情联系支持Schema 变更方面Early Access 期间支持加列、改名嵌套子列移到不同父级除外、删列、去掉已有标量列的NOT NULL、增改删支持的列默认值。不会自动应用改列类型、给已有可空列加NOT NULL、ReplacingMergeTree下变更/删除/重命名源主键列、重命名源表或 schema。中断的多列变更可能留下部分应用的目标 schema文档明确不要手动修复托管表或视图pipeline 重启后仍失败则联系支持。限制与运行中注意事项Early Access 期间使用ReplacingMergeTree时源主键值必须不可变。更新主键值会导致旧键在生成的 current-state 视图中仍然可见该限制会在主键更新能力可用时移除。源端TRUNCATE会 truncate 对应 ClickHouse 表两种引擎都如此重置某张表会删除并重建该表ReplacingMergeTree还包括其生成视图该表之前累积的目的地数据在新初始同步开始前会清空。Pipelines 是 at-least-once 处理罕见恢复场景下已确认的批次可能被重复处理。默认的ReplacingMergeTree布局维护当前状态表可吸收重复MergeTree保存 append-only 历史消费端必须容忍重复事件。源表加入或移出 publication 后需要重启 pipeline 才生效。下一步复制延迟、slot 状态Unreserved/Lost与日志排查见 Monitor pipeline status。publication 的高级选项列选择、行过滤、分区表publish_via_partition_root与 pipeline 高级设置Batch wait time、Table sync workers、Copy connections per table、Invalidated slot behavior见 Set up Pipelines。更多问题与限制说明见 Pipelines FAQ 与 ClickHouse destination。【免费下载链接】supabaseThe Postgres development platform. Supabase gives you a dedicated Postgres database to build your web, mobile, and AI applications.项目地址: https://gitcode.com/GitHub_Trending/supa/supabase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考