PostgreSQL实现数据表跨库同步的四种方案

 更新时间:2026年05月17日 14:39:11   作者:雷工笔记  
文章详细介绍了四种用于实现PostgreSQL数据库表数据变化实时或定时同步到另一个独立PG库的方法,包括触发器+外部表、逻辑复制、Debezium+Kafka和pg_dump定时任务,针对不同场景和需求,推荐了最适合的方案,并详细阐述了各自的优点、适用场景、配置方法和使用注意事项

要实现一个 PG 库的表数据变化(增删改),实时 / 定时同步到另一个独立 PG 库,豆老师给整理了生产环境最常用、最稳定的 4 种方案。

一、最简单:触发器 + 外部表(dblink/foreign table)

适合小数据量、单表同步、实时性要求高的场景,无需额外组件,纯 PG 原生实现。

实现原理

1、源库表创建触发器,数据增删改时触发

2、触发器调用函数,通过 dblink 连接目标库

3、自动执行同步 SQL,实时写入目标库

核心步骤

1、源库安装扩展

-- 源库执行

CREATE EXTENSION IF NOT EXISTS dblink;

2、创建同步函数(源库)

CREATE OR REPLACE FUNCTION sync_table_func()

RETURNS TRIGGER AS $$

BEGIN

  -- 连接目标库:替换为你的目标库信息

  PERFORM dblink_connect(

    'dbname=目标库名 host=目标IP port=5432 user=账号 password=密码'

  );

-- INSERT 同步

  IF (TG_OP = 'INSERT') THEN

    PERFORM dblink_exec(

      'INSERT INTO 目标表名 VALUES ($1.*)', NEW

    );

  -- UPDATE 同步

  ELSIF (TG_OP = 'UPDATE') THEN

    PERFORM dblink_exec(

      'UPDATE 目标表名 SET 字段1=$1,字段2=$2 WHERE id=$3',

      NEW.字段1, NEW.字段2, OLD.id

    );

  -- DELETE 同步

  ELSIF (TG_OP = 'DELETE') THEN

    PERFORM dblink_exec(

      'DELETE FROM 目标表名 WHERE id=$1', OLD.id

    );

  END IF;

PERFORM dblink_disconnect();

  RETURN COALESCE(NEW, OLD);

END;

$$ LANGUAGE plpgsql;

3、绑定触发器到源表

CREATE TRIGGER trigger_sync_table

AFTER INSERT OR UPDATE OR DELETE ON 源表名

FOR EACH ROW EXECUTE FUNCTION sync_table_func();

优点

①纯 PG 原生,零部署、零学习成本

②实时同步,延迟极低

③单表配置快速

缺点

①大并发、大数据量会影响源库性能

②目标库不可用时,源库会报错

③不适合批量操作、分表同步

二、最常用:逻辑复制(Logical Replication)

PG 10+ 原生自带,生产标准方案,适合实时同步、多表、大数据量

核心优势

①不影响源库性能

②目标库断开重连后自动续传,不丢数据

③支持整库 / 多表 / 指定表同步

④官方支持,稳定可靠

最简配置(3 步)

1、源库配置(postgresql.conf)

wal_level = logical  # 必须修改
max_replication_slots = 10
max_wal_senders = 10

重启 PG 生效。

2、源库创建发布端

-- 创建发布(同步指定表)

CREATE PUBLICATION pub_target FOR TABLE 表1, 表2;

-- 授权复制权限

ALTER ROLE 账号 REPLICATION;

3、目标库创建订阅端

sql

-- 创建订阅,自动同步数据

CREATE SUBSCRIPTION sub_source

CONNECTION 'host=源IP port=5432 dbname=源库 user=账号 password=密码'

PUBLICATION pub_target;

✅ 完成:源表任何变化都会实时同步到目标库。

三、企业级:Debezium + Kafka(CDC 方案)

适合高并发、分布式、多系统订阅同一份数据的场景(微服务架构)。

原理

①Debezium 监听 PG WAL 日志

②把数据变化发送到 Kafka

③目标库 / 其他系统消费消息同步

优点

①完全解耦,不影响业务库

②支持多目标同步

③可回溯数据变更历史

④大数据架构标配

缺点

①部署复杂(需要 Kafka、Debezium)

②小项目没必要

四、定时同步:pg_dump + cron /pg_clogSync

适合非实时、每天 / 每小时同步、对延迟不敏感的场景。

方案 1:定时全量同步(简单)

源库导出

pg_dump -h 源IP -U 用户 -d 库 -t 表 -F c -f dumpfile

目标库恢复

pg_restore -h 目标IP -U 用户 -d 库 -t 表 dumpfile

配合 Linux crontab 定时执行。

方案 2:增量同步(pg_clogSync)

只同步变化的数据,效率高,适合大表。

方案选择建议

场景

推荐方案

难度

单表、小数据、实时

触发器 + dblink

多表、生产、实时

逻辑复制(首选)

⭐⭐

微服务、多系统同步

Debezium + Kafka

⭐⭐⭐⭐

非实时、定时同步

pg_dump 定时任务

⭐⭐

最推荐:逻辑复制(生产 90% 场景用它)

优点碾压其他方案:

①官方原生、稳定

②实时、不丢数据

③对源库几乎无性能损耗

④配置 5 分钟搞定

四、总结

1、新手 / 小项目:直接用 触发器 + dblink,最快上线

2、生产环境:优先 逻辑复制,稳定、高效、零侵入

3、分布式架构:用 Debezium CDC

4、非实时同步:用 定时 pg_dump

以上就是PostgreSQL实现数据表跨库同步的四种方案的详细内容,更多关于PostgreSQL数据表跨库同步的资料请关注脚本之家其它相关文章!

相关文章

  • PostgreSQL COALESCE使用方法代码解析

    PostgreSQL COALESCE使用方法代码解析

    这篇文章主要介绍了PostgreSQL COALESCE使用方法代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-12-12
  • Linux系统安装PostgreSQL数据库及配置的详细过程

    Linux系统安装PostgreSQL数据库及配置的详细过程

    这篇文章主要给大家介绍了关于Linux系统安装PostgreSQL数据库及配置的详细过程,PgSQL(全称PostgreSQL)是一个功能强大的开源对象-关系型数据库系统,结合了许多安全存储和扩展最复杂数据工作负载的功能,需要的朋友可以参考下
    2023-12-12
  • postgresql数据库执行计划图文详解

    postgresql数据库执行计划图文详解

    了解PostgreSQL执行计划对于程序员来说是一项关键技能,执行计划是我们优化查询,验证我们的优化查询是否确实按照我们期望的方式运行的重要方式,这篇文章主要给大家介绍了关于postgresql数据库执行计划的相关资料,需要的朋友可以参考下
    2024-01-01
  • PostgreSQL安装、配置及简单使用方法

    PostgreSQL安装、配置及简单使用方法

    这篇文章主要介绍了PostgreSQL安装及简单使用方法,需要的朋友可以参考下
    2016-11-11
  • PostgreSQL中数据批量导入导出的错误处理

    PostgreSQL中数据批量导入导出的错误处理

    在 PostgreSQL 中进行数据的批量导入导出是常见的操作,但有时可能会遇到各种错误,下面将详细探讨可能出现的错误类型、原因及相应的解决方案,并提供具体的示例来帮助您更好地理解和处理这些问题,需要的朋友可以参考下
    2024-07-07
  • postgreSQL中的row_number() 与distinct用法说明

    postgreSQL中的row_number() 与distinct用法说明

    这篇文章主要介绍了postgreSQL中的row_number() 与distinct用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • postgresql 计算两点距离的2种方法小结

    postgresql 计算两点距离的2种方法小结

    这篇文章主要介绍了postgresql 计算两点距离的2种方法小结,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01
  • PostgreSQL物理备份恢复之 pg_rman的用法说明

    PostgreSQL物理备份恢复之 pg_rman的用法说明

    这篇文章主要介绍了PostgreSQL物理备份恢复之 pg_rman的用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • PostgreSQL中pg_surgery的扩展使用

    PostgreSQL中pg_surgery的扩展使用

    pg_surgery是PostgreSQL的高风险扩展,用于修复表、索引及事务ID回卷等极端数据库问题,需谨慎操作,做好备份,仅由经验丰富的数据库管理员在别无选择的情况下使用
    2025-06-06
  • PostgreSQL数据库备份与恢复的四种办法

    PostgreSQL数据库备份与恢复的四种办法

    在数据为王的时代,数据库中存储的信息堪称企业的生命线,而PostgreSQL作为一款广泛应用的开源数据库,学会如何妥善进行备份与恢复操作,是每个开发者与运维人员必备的技能,今天,咱们就深入探究一下PostgreSQL相关的备份恢复策略,并附上丰富的代码示例
    2025-01-01

最新评论