最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PostgreSQL實(shí)現(xiàn)數(shù)據(jù)表跨庫同步的四種方案

 更新時間:2026年05月17日 14:39:11   作者:雷工筆記  
文章詳細(xì)介紹了四種用于實(shí)現(xiàn)PostgreSQL數(shù)據(jù)庫表數(shù)據(jù)變化實(shí)時或定時同步到另一個獨(dú)立PG庫的方法,包括觸發(fā)器+外部表、邏輯復(fù)制、Debezium+Kafka和pg_dump定時任務(wù),針對不同場景和需求,推薦了最適合的方案,并詳細(xì)闡述了各自的優(yōu)點(diǎn)、適用場景、配置方法和使用注意事項(xiàng)

要實(shí)現(xiàn)一個 PG 庫的表數(shù)據(jù)變化(增刪改),實(shí)時 / 定時同步到另一個獨(dú)立 PG 庫,豆老師給整理了生產(chǎn)環(huán)境最常用、最穩(wěn)定的 4 種方案。

一、最簡單:觸發(fā)器 + 外部表(dblink/foreign table)

適合小數(shù)據(jù)量、單表同步、實(shí)時性要求高的場景,無需額外組件,純 PG 原生實(shí)現(xiàn)。

實(shí)現(xiàn)原理

1、源庫表創(chuàng)建觸發(fā)器,數(shù)據(jù)增刪改時觸發(fā)

2、觸發(fā)器調(diào)用函數(shù),通過 dblink 連接目標(biāo)庫

3、自動執(zhí)行同步 SQL,實(shí)時寫入目標(biāo)庫

核心步驟

1、源庫安裝擴(kuò)展

-- 源庫執(zhí)行

CREATE EXTENSION IF NOT EXISTS dblink;

2、創(chuàng)建同步函數(shù)(源庫)

CREATE OR REPLACE FUNCTION sync_table_func()

RETURNS TRIGGER AS $$

BEGIN

? -- 連接目標(biāo)庫:替換為你的目標(biāo)庫信息

? PERFORM dblink_connect(

? ? 'dbname=目標(biāo)庫名 host=目標(biāo)IP port=5432 user=賬號 password=密碼'

? );

-- INSERT 同步

? IF (TG_OP = 'INSERT') THEN

? ? PERFORM dblink_exec(

? ? ? 'INSERT INTO 目標(biāo)表名 VALUES ($1.*)', NEW

? ? );

? -- UPDATE 同步

? ELSIF (TG_OP = 'UPDATE') THEN

? ? PERFORM dblink_exec(

? ? ? 'UPDATE 目標(biāo)表名 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 目標(biāo)表名 WHERE id=$1', OLD.id

? ? );

? END IF;

PERFORM dblink_disconnect();

? RETURN COALESCE(NEW, OLD);

END;

$$ LANGUAGE plpgsql;

3、綁定觸發(fā)器到源表

CREATE TRIGGER trigger_sync_table

AFTER INSERT OR UPDATE OR DELETE ON 源表名

FOR EACH ROW EXECUTE FUNCTION sync_table_func();

優(yōu)點(diǎn)

①純 PG 原生,零部署、零學(xué)習(xí)成本

②實(shí)時同步,延遲極低

③單表配置快速

缺點(diǎn)

①大并發(fā)、大數(shù)據(jù)量會影響源庫性能

②目標(biāo)庫不可用時,源庫會報錯

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

二、最常用:邏輯復(fù)制(Logical Replication)

PG 10+ 原生自帶,生產(chǎn)標(biāo)準(zhǔn)方案,適合實(shí)時同步、多表、大數(shù)據(jù)量。

核心優(yōu)勢

①不影響源庫性能

②目標(biāo)庫斷開重連后自動續(xù)傳,不丟數(shù)據(jù)

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

④官方支持,穩(wěn)定可靠

最簡配置(3 步)

1、源庫配置(postgresql.conf)

wal_level = logical? # 必須修改
max_replication_slots = 10
max_wal_senders = 10

重啟 PG 生效。

2、源庫創(chuàng)建發(fā)布端

-- 創(chuàng)建發(fā)布(同步指定表)

CREATE PUBLICATION pub_target FOR TABLE 表1, 表2;

-- 授權(quán)復(fù)制權(quán)限

ALTER ROLE 賬號 REPLICATION;

3、目標(biāo)庫創(chuàng)建訂閱端

sql

-- 創(chuàng)建訂閱,自動同步數(shù)據(jù)

CREATE SUBSCRIPTION sub_source

CONNECTION 'host=源IP port=5432 dbname=源庫 user=賬號 password=密碼'

PUBLICATION pub_target;

? 完成:源表任何變化都會實(shí)時同步到目標(biāo)庫。

三、企業(yè)級:Debezium + Kafka(CDC 方案)

適合高并發(fā)、分布式、多系統(tǒng)訂閱同一份數(shù)據(jù)的場景(微服務(wù)架構(gòu))。

原理

①Debezium 監(jiān)聽 PG WAL 日志

②把數(shù)據(jù)變化發(fā)送到 Kafka

③目標(biāo)庫 / 其他系統(tǒng)消費(fèi)消息同步

優(yōu)點(diǎn)

①完全解耦,不影響業(yè)務(wù)庫

②支持多目標(biāo)同步

③可回溯數(shù)據(jù)變更歷史

④大數(shù)據(jù)架構(gòu)標(biāo)配

缺點(diǎn)

①部署復(fù)雜(需要 Kafka、Debezium)

②小項(xiàng)目沒必要

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

適合非實(shí)時、每天 / 每小時同步、對延遲不敏感的場景。

方案 1:定時全量同步(簡單)

源庫導(dǎo)出

pg_dump -h 源IP -U 用戶 -d 庫 -t 表 -F c -f dumpfile

目標(biāo)庫恢復(fù)

pg_restore -h 目標(biāo)IP -U 用戶 -d 庫 -t 表 dumpfile

配合 Linux crontab 定時執(zhí)行。

方案 2:增量同步(pg_clogSync)

只同步變化的數(shù)據(jù),效率高,適合大表。

方案選擇建議

場景

推薦方案

難度

單表、小數(shù)據(jù)、實(shí)時

觸發(fā)器 + dblink

?

多表、生產(chǎn)、實(shí)時

邏輯復(fù)制(首選)

??

微服務(wù)、多系統(tǒng)同步

Debezium + Kafka

????

非實(shí)時、定時同步

pg_dump 定時任務(wù)

??

最推薦:邏輯復(fù)制(生產(chǎn) 90% 場景用它)

優(yōu)點(diǎn)碾壓其他方案:

①官方原生、穩(wěn)定

②實(shí)時、不丟數(shù)據(jù)

③對源庫幾乎無性能損耗

④配置 5 分鐘搞定

四、總結(jié)

1、新手 / 小項(xiàng)目:直接用 觸發(fā)器 + dblink,最快上線

2、生產(chǎn)環(huán)境:優(yōu)先 邏輯復(fù)制,穩(wěn)定、高效、零侵入

3、分布式架構(gòu):用 Debezium CDC

4、非實(shí)時同步:用 定時 pg_dump

以上就是PostgreSQL實(shí)現(xiàn)數(shù)據(jù)表跨庫同步的四種方案的詳細(xì)內(nèi)容,更多關(guān)于PostgreSQL數(shù)據(jù)表跨庫同步的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • PostgreSQL中的日期/時間函數(shù)詳解

    PostgreSQL中的日期/時間函數(shù)詳解

    這篇文章主要給大家介紹了關(guān)于PostgreSQL中日期/時間函數(shù)的相關(guān)資料,文章通過實(shí)例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2022-01-01
  • postgresql 修改字段長度的操作

    postgresql 修改字段長度的操作

    這篇文章主要介紹了postgresql 修改字段長度的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • Linux 上 定時備份postgresql 數(shù)據(jù)庫的方法

    Linux 上 定時備份postgresql 數(shù)據(jù)庫的方法

    這篇文章主要介紹了Linux 上 定時備份postgresql 數(shù)據(jù)庫的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • postgresql的now()與Oracle的sysdate區(qū)別說明

    postgresql的now()與Oracle的sysdate區(qū)別說明

    這篇文章主要介紹了postgresql的now()與Oracle的sysdate區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • PostgreSQL創(chuàng)建觸發(fā)器的實(shí)現(xiàn)示例

    PostgreSQL創(chuàng)建觸發(fā)器的實(shí)現(xiàn)示例

    PostgreSQL的觸發(fā)器Trigger是一類特殊的數(shù)據(jù)庫對象,本文主要介紹了PostgreSQL創(chuàng)建觸發(fā)器的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-06-06
  • PostgreSQL創(chuàng)建新用戶所遇見的權(quán)限問題以及解決辦法

    PostgreSQL創(chuàng)建新用戶所遇見的權(quán)限問題以及解決辦法

    這篇文章主要給大家介紹了關(guān)于PostgreSQL創(chuàng)建新用戶所遇見的權(quán)限問題以及解決辦法, 在PostgreSQL中創(chuàng)建一個新用戶非常簡單,但可能會遇到權(quán)限問題,需要的朋友可以參考下
    2023-09-09
  • PostgreSQL 邏輯復(fù)制 配置操作

    PostgreSQL 邏輯復(fù)制 配置操作

    這篇文章主要介紹了PostgreSQL 邏輯復(fù)制 配置操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • Visual Studio Code(VS Code)查詢PostgreSQL拓展安裝教程圖解

    Visual Studio Code(VS Code)查詢PostgreSQL拓展安裝教程圖解

    這篇文章主要介紹了Visual Studio Code(VS Code)查詢PostgreSQL拓展安裝教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • PostgreSQL中使用dblink實(shí)現(xiàn)跨庫查詢的方法

    PostgreSQL中使用dblink實(shí)現(xiàn)跨庫查詢的方法

    這篇文章主要介紹了PostgreSQL中使用dblink實(shí)現(xiàn)跨庫查詢的方法,需要的朋友可以參考下
    2017-05-05
  • PostgreSQL中的NULL處理實(shí)現(xiàn)

    PostgreSQL中的NULL處理實(shí)現(xiàn)

    PostgreSQL中的NULL值處理功能豐富,可以幫助開發(fā)者更好地管理和查詢數(shù)據(jù),合理地使用NULL值可以提高查詢效率,下面就來詳細(xì)的介紹一下NULL的處理,感興趣的可以了解一下
    2026-03-03

最新評論

桓台县| 新和县| 崇左市| 临朐县| 炎陵县| 南乐县| 若尔盖县| 张掖市| 乐至县| 峡江县| 大港区| 庄浪县| 阳春市| 遵义县| 聊城市| 云南省| 新宾| 若尔盖县| 新宾| 宜兰县| 横山县| 宜川县| 桦南县| 兴安县| 同仁县| 璧山县| 镇康县| 周至县| 顺平县| 华池县| 邻水| 比如县| 汝阳县| 缙云县| 青阳县| 宽甸| 仁怀市| 洪洞县| 大渡口区| 辉县市| 沂南县|