pgstream: 支持 DDL 变更的 PostgreSQL 复制

John Doe 十一月 11, 2025

pgstream是一款开源的变更数据捕获(CDC)命令行工具及开发库,支持将 PostgreSQL 数据复制到任意指定目标,且能处理数据结构变更(DDL)。

功能特性

  1. 模式变更跟踪与 DDL 变更复制:可跟踪数据库模式(Schema)的变更,并将 DDL 变更同步到目标端。
  2. 支持多种开箱即用的目标端:包括 Elasticsearch/OpenSearch、Webhook、PostgreSQL 等。
  3. PostgreSQL 初始快照与按需快照:支持初始数据快照,也可根据需求随时触发快照(适用于无需持续复制的场景)。
  4. 列值转换:可实时对数据列的值进行转换(例如实时匿名化数据)。
  5. 模块化部署配置:部署配置采用模块化设计,仅需依赖 PostgreSQL 即可运行。
  6. Kafka 支持(基于模式的分区):支持与 Kafka 集成,并可基于数据模式进行分区。
  7. 可扩展的自定义目标端支持:支持扩展开发,以适配自定义的目标存储或系统。

pgstream 如何工作?

在内部,pgstream 以流式管道的形式构建:数据从一个模块流入下一个模块,最终到达已配置的输出插件。pgstream 会跟踪模式变更,并将其与数据变更一起复制,以确保下游能保持源数据的一致视图。这种模块化设计使得添加和集成输出插件的实现变得简单轻松。

pgstream 架构

模式变更跟踪

pgstream 最主要的差异化优势之一,就是能自动跟踪并复制模式变更。它是如何实现的呢?pgstream 依赖 SQL 触发器,这些触发器会填充一个 PostgreSQL 表(pgstream.schema_log),该表包含特定模式下所有 DDL 变更的历史日志。每当发生模式变更时,触发器会在模式日志表中创建一条新记录,其中以 JSON 格式存储模式信息。该表会跟踪所有模式变更,形成一个线性化的变更日志;pgstream 管道会解析此日志,识别变更内容,并将相关变更推送到下游。

跟踪模式变更

模式变更和数据变更属于同一线性流,下游消费者会在依赖新模式的数据到达之前,立即感知到模式变更。这就避免了数据丢失和手动干预的需求。

参考

pgstream:https://github.com/xataio/pgstream