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

postgresql邏輯復(fù)制的實(shí)現(xiàn)

 更新時(shí)間:2025年06月16日 09:50:57   作者:24K老游  
本文介紹PostgreSQL邏輯復(fù)制實(shí)現(xiàn),基于發(fā)布訂閱模型,需設(shè)置WAL_LEVEL為logical,支持跨庫備份,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

如果要將不同庫的某關(guān)鍵表備份到指定庫里,可以用邏輯復(fù)制完成相關(guān)功能。

邏輯復(fù)制基本概念

PG邏輯復(fù)制基于發(fā)布和訂閱模型,一個(gè)發(fā)布可以有多個(gè)訂閱者。
發(fā)布publication可以創(chuàng)建在任意單機(jī)上,也可以在物理復(fù)制的主庫上,發(fā)布端要求數(shù)據(jù)庫參數(shù)WAL_LEVEL為logical。一個(gè)發(fā)布可以被多個(gè)數(shù)據(jù)庫訂閱。一個(gè)發(fā)布只能包含一個(gè)數(shù)據(jù)庫中的表,但是這些表可以分布在不同的schema下。

訂閱處于邏輯復(fù)制的下游端,一個(gè)訂閱只能對(duì)應(yīng)一個(gè)發(fā)布。訂閱端的數(shù)據(jù)庫名可以跟發(fā)布端不同,但是訂閱發(fā)布的表名和schema必須相同。

當(dāng)訂閱創(chuàng)建成功后,就會(huì)自動(dòng)在發(fā)布端創(chuàng)建多個(gè)邏輯復(fù)制槽,其中一個(gè)用于后續(xù)的增量數(shù)據(jù)同步,永久保留,另外還會(huì)創(chuàng)建一個(gè)或者多個(gè)的臨時(shí)復(fù)制槽,用于復(fù)制表的全量快照數(shù)據(jù)。
是當(dāng)發(fā)布端是物理復(fù)制架構(gòu)時(shí),如果發(fā)生主從切換,發(fā)布是不會(huì)跟隨數(shù)據(jù)庫failover的。但是可以通過手工拷貝文件或者利用插件實(shí)現(xiàn)。

邏輯復(fù)制的限制

(1)數(shù)據(jù)庫的表結(jié)構(gòu)不會(huì)被復(fù)制,所以需要在訂閱端先創(chuàng)建對(duì)應(yīng)的schema和表
(2)TRUNCATE和DDL不會(huì)復(fù)制,如果要進(jìn)行DDL變更,需要先在訂閱端執(zhí)行DDL,然后在發(fā)布端執(zhí)行。
(3)Sequence不會(huì)不復(fù)制,當(dāng)發(fā)布端使用了sequence數(shù)據(jù),其寫入了表的值會(huì)同步到訂閱端,但是目標(biāo)庫的sequence并不會(huì)發(fā)生變化。
(4)不支持大對(duì)象。
(5)復(fù)制只能是基表到基表,不支持視圖、物化視圖、外部表等。如果表是分區(qū)表,需要基于分區(qū)進(jìn)行復(fù)制。

測(cè)試

  • 發(fā)布和訂閱端都新建相同的表t1,t2
  • 發(fā)布端為t1創(chuàng)建發(fā)布
  • 訂閱端為t1創(chuàng)建訂閱
新建一個(gè)庫,做為訂閱端
[pg@localhost data]$ pg_ctl init -D /data/db3

發(fā)布與訂閱端都建相關(guān)同步結(jié)構(gòu)的表t1,t2
postgres=# create table t1(id int,name varchar(20));
CREATE TABLE
postgres=# create table t2(id int,name varchar(20));
CREATE TABLE

在發(fā)布端為t1創(chuàng)建發(fā)布

修改發(fā)布端wal_level = logical,修改后要restart訂閱端,reload不生效。
postgres=# show wal_level;
 wal_level
-----------
 logical
(1 row)


postgres=# create publication pub_test for table t1;
CREATE PUBLICATION

在訂閱端為t1創(chuàng)建訂閱

注:訂閱端有wal_level也必須是logical

postgres=# create subscription sub_test connection 'host=127.0.0.1 port=15431 dbname=postgres user=pg' publication pub_test;
NOTICE:  created replication slot "sub_test" on publisher
CREATE SUBSCRIPTION

觀察同步效果

在發(fā)布端分別向 t1 t2表插入數(shù)據(jù)
postgres=# insert into t1(id,name) values (1,'name1');
INSERT 0 1
postgres=# insert into t2(id,name) values (1,'name1');
INSERT 0 1

查看訂閱端,只有已新建訂閱的表數(shù)據(jù)同步
postgres=# select * from t1;
 id | name
----+-------
  1 | name1
(1 row)

postgres=# select * from t2;
 id | name
----+------
(0 rows)

為新表添加同步

發(fā)布端,將t2加入到發(fā)布
postgres=# alter publication pub_test add table t2;
ALTER PUBLICATION

查看發(fā)布表
postgres=# select * from pg_publication_tables;
 pubname  | schemaname | tablename
----------+------------+-----------
 pub_test | public     | t1
 pub_test | public     | t2
(2 rows)

訂閱端,刷新訂閱配置
postgres=# alter subscription sub_test refresh publication;
ALTER SUBSCRIPTION

發(fā)布端,分別向t1 t2插入數(shù)據(jù)
postgres=# insert into t1(id,name) values (2,'name2');
INSERT 0 1
postgres=# insert into t2(id,name) values (2,'name2');
INSERT 0 1

訂閱端,查看t1 t2的數(shù)據(jù)
postgres=# select * from t1;
 id | name
----+-------
  1 | name1
  2 | name2
(2 rows)

postgres=# select * from t2;
 id | name
----+-------
  1 | name1
  2 | name2
(2 rows)

復(fù)制標(biāo)識(shí) REPLICA IDENTITY

REPLICA IDENTITY,復(fù)制標(biāo)識(shí),共有4種配置模式,分別為,

  • 默認(rèn)模式(default):
    非系統(tǒng)表采用的默認(rèn)模式,如果有主鍵,則用主鍵列作為身份標(biāo)識(shí),否則用完整模式。
  • 索引模式(index):將某一個(gè)符合條件的索引中的列,用作身份標(biāo)識(shí)。
  • 完整模式(full):將整行記錄中的所有列作為復(fù)制標(biāo)識(shí)(類似于整個(gè)表上每一列共同組成主鍵)。
  • 無身份模式(nothing):不記錄任何復(fù)制標(biāo)識(shí),這意味著UPDATE|DELETE操作無法復(fù)制到訂閱者上。

表改復(fù)制標(biāo)識(shí)可以通過ALTER TABLE進(jìn)行修改。
ALTER TABLE T1 REPLICA IDENTITY { DEFAULT | USING INDEX index_name | FULL | NOTHING};

T1沒有主建,直接刪除,提示需要設(shè)置 REPLICA IDENTITY
postgres=# delete from t1 where id=1;
ERROR:  cannot delete from table "t1" because it does not have a replica identity and publishes deletes
HINT:  To enable deleting from the table, set REPLICA IDENTITY using ALTER TABLE.

修改為full,刪除成功
postgres=# alter table t1 replica identity full;
ALTER TABLE
postgres=# delete from t1 where id=1;
DELETE 1

到此這篇關(guān)于postgresql 邏輯復(fù)制的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)postgresql 邏輯復(fù)制內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • PostgreSQL邏輯復(fù)制解密原理解析

    PostgreSQL邏輯復(fù)制解密原理解析

    邏輯復(fù)制,是基于復(fù)制標(biāo)識(shí)復(fù)制數(shù)據(jù)及其變化的一種方法,區(qū)別于物理復(fù)制對(duì)頁面操作的描述,邏輯復(fù)制是對(duì)事務(wù)及數(shù)據(jù)元組的一種描述,這篇文章主要介紹了PostgreSQL邏輯復(fù)制解密原理解析,需要的朋友可以參考下
    2022-09-09
  • PostgreSQL數(shù)據(jù)庫部署linux服務(wù)器完整教程

    PostgreSQL數(shù)據(jù)庫部署linux服務(wù)器完整教程

    本文主要述了在Linux服務(wù)器上部署PostgreSQL數(shù)據(jù)庫的過程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2026-05-05
  • PostgreSQL 自增語法的用法說明

    PostgreSQL 自增語法的用法說明

    這篇文章主要介紹了PostgreSQL 自增語法的用法說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • PostgreSQL如何用psql運(yùn)行SQL文件

    PostgreSQL如何用psql運(yùn)行SQL文件

    文章介紹了兩種運(yùn)行預(yù)寫好的SQL文件的方式:首先連接數(shù)據(jù)庫后執(zhí)行,或者直接通過psql命令執(zhí)行,需要注意的是,文件路徑在Linux系統(tǒng)中應(yīng)使用斜杠/,而不是反斜杠\,否則會(huì)報(bào)Permission denied錯(cuò)誤
    2024-12-12
  • Win11安裝PostgreSQL數(shù)據(jù)庫的兩種方式詳細(xì)步驟

    Win11安裝PostgreSQL數(shù)據(jù)庫的兩種方式詳細(xì)步驟

    PostgreSQL是備受業(yè)界青睞的關(guān)系型數(shù)據(jù)庫,尤其是在地理空間和移動(dòng)領(lǐng)域,這篇文章主要介紹了Win11安裝PostgreSQL數(shù)據(jù)庫的兩種方式詳細(xì)步驟,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-04-04
  • PostgreSQL 打印日志信息所在的源文件和行數(shù)的實(shí)例

    PostgreSQL 打印日志信息所在的源文件和行數(shù)的實(shí)例

    這篇文章主要介紹了PostgreSQL 打印日志信息所在的源文件和行數(shù)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • Postgresql根據(jù)響應(yīng)數(shù)據(jù)反向?qū)崿F(xiàn)建表語句與insert語句的過程

    Postgresql根據(jù)響應(yīng)數(shù)據(jù)反向?qū)崿F(xiàn)建表語句與insert語句的過程

    根據(jù)已有數(shù)據(jù),可構(gòu)建名為products的表,包含id(自增主鍵)、title(非空字符串)、progress(非空整數(shù))三個(gè)字段,建表后,可通過insert語句插入數(shù)據(jù),這種反向操作有助于從現(xiàn)有數(shù)據(jù)結(jié)構(gòu)出發(fā),快速構(gòu)建數(shù)據(jù)庫表,并進(jìn)行數(shù)據(jù)填充,感興趣的朋友跟隨小編一起看看吧
    2022-02-02
  • 在PostgreSQL中查看有哪些用戶的三種方法

    在PostgreSQL中查看有哪些用戶的三種方法

    本文主要介紹了PostgreSQL查看用戶(角色)的三種方法:SQL查詢系統(tǒng)表(pg_roles/pg_user)、元命令(\du)及pg_shadow視圖,適用于不同場(chǎng)景,如日常管理或腳本處理,并有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考下
    2025-09-09
  • PostgreSQL中pageinspect 的擴(kuò)展使用小結(jié)

    PostgreSQL中pageinspect 的擴(kuò)展使用小結(jié)

    pageinspect是PostgreSQL的底層擴(kuò)展,允許數(shù)據(jù)庫管理員和開發(fā)者直接檢查數(shù)據(jù)庫頁面的內(nèi)部結(jié)構(gòu),需超級(jí)用戶權(quán)限,適用于9.6+版本,感興趣的可以了解一下
    2025-06-06
  • PostgreSQL云服務(wù)器安裝配置指南

    PostgreSQL云服務(wù)器安裝配置指南

    這篇文章主要介紹了PostgreSQL的相關(guān)配置,包括安裝、基本配置、安全加固等,重點(diǎn)介紹了配置文件調(diào)整、遠(yuǎn)程訪問配置、訪問控制配置等內(nèi)容,并強(qiáng)調(diào)了連接池和索引優(yōu)化的重要性,需要的朋友可以參考下
    2026-05-05

最新評(píng)論

铁力市| 定日县| 茂名市| 通山县| 广宁县| 札达县| 嘉祥县| 吐鲁番市| 中阳县| 南丹县| 阜新市| 威信县| 丰城市| 额敏县| 巴彦淖尔市| 弋阳县| 民勤县| 镇原县| 伊宁市| 柏乡县| 栾城县| 公主岭市| 惠安县| 织金县| 特克斯县| 清流县| 盘山县| 凉山| 鹿泉市| 吉木乃县| 迭部县| 施甸县| 东城区| 连山| 桂阳县| 宝山区| 吉木萨尔县| 马龙县| 仙居县| 库尔勒市| 吉水县|