You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL是否支持仅复制发布端表的指定列子集?

PostgreSQL逻辑复制同步表列子集方案

完全可行,PostgreSQL 10及以上版本的逻辑复制原生支持仅同步源表的部分列,不会抛出错误,只要满足基础配置要求即可,非常适配你只读订阅的场景。

核心配置要求

  • 订阅端保留的列,列名、数据类型必须和源端对应列完全匹配
  • 保留的列子集必须覆盖源表的REPLICA IDENTITY对应列:
    • 源表REPLICA IDENTITY为默认DEFAULT(即使用主键作为副本标识)时,订阅端表必须包含源表全部主键列
    • 若源表无主键、或不想同步主键列,可将源表REPLICA IDENTITY修改为FULL,该模式下无列强制要求,但更新、删除操作的同步效率会有所降低

实操示例(对应你的product表场景)

假设源端product表包含大量业务无关列,你仅需要同步id、name、price三列:

  1. 源端配置发布(推荐PostgreSQL 11+使用列过滤,更节省带宽)
-- 源库执行,发布时直接指定需要同步的列
CREATE PUBLICATION product_pub FOR TABLE product (id, name, price);

如果你的PostgreSQL版本低于11,不支持发布端列过滤,直接正常发布整表即可,订阅端会自动忽略多余列。

  1. 订阅端建表
-- 订阅库执行,仅创建需要的列即可
CREATE TABLE product (
    id INT PRIMARY KEY,
    name VARCHAR(200) NOT NULL,
    price NUMERIC(10,2) NOT NULL
);
  1. 订阅端创建订阅
CREATE SUBSCRIPTION product_sub
CONNECTION 'dbname=源库名 host=源库地址 user=复制用户 password=复制密码'
PUBLICATION product_pub;

注意事项

  • 只读场景下不需要处理写入冲突,该方案稳定性极强
  • 后续需要新增同步列时,只需先在订阅端添加对应列(类型和源端一致,可自行设置默认值或允许为空),再在源端发布规则中添加对应列即可,不需要重新同步全量数据
  • 不要修改订阅端同步列的列名、数据类型,否则会导致复制中断

内容的提问来源于stack exchange,提问作者coterobarros

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 00:15:02