PostgreSQL 發(fā)布

2021-09-01 17:44 更新

發(fā)布可以被定義在任何物理復(fù)制的主服務(wù)器上。定義有發(fā)布的節(jié)點(diǎn)被稱為發(fā)布者。發(fā)布是從一個(gè)表或者一組表生成的改變的集合,也可以被描述為更改集合或者復(fù)制集合。每個(gè)發(fā)布都只存在于一個(gè)數(shù)據(jù)庫中。

發(fā)布與模式不同,不會(huì)影響表的訪問方式。如果需要,每個(gè)表都可以被加入到多個(gè)發(fā)布。當(dāng)前,發(fā)布只能包含表。對象必須被明確地加入到發(fā)布,除非發(fā)布是用ALL TABLES創(chuàng)建的。

Publication可以選擇把它們產(chǎn)生的更改限制為INSERT、UPDATE、DELETE以及TRUNCATE的任意組合,類似于觸發(fā)器如何被特定事件類型觸發(fā)的方式。默認(rèn)情況下,所有操作類型都會(huì)被復(fù)制。

為了能夠復(fù)制UPDATEDELETE操作,被發(fā)布的表必須配置有一個(gè)復(fù)制標(biāo)識(shí),這樣在訂閱者那一端才能標(biāo)識(shí)對于更新或刪除合適的行。默認(rèn)情況下,復(fù)制標(biāo)識(shí)就是主鍵(如果有主鍵)。也可以在復(fù)制標(biāo)識(shí)上設(shè)置另一個(gè)唯一索引(有特定的額外要求)。如果表沒有合適的鍵,那么可以設(shè)置成復(fù)制標(biāo)識(shí) full,它表示整個(gè)行都成為那個(gè)鍵。不過,這樣做效率很低,只有在沒有其他方案的情況下才應(yīng)該使用。如果在發(fā)布者端設(shè)置了full之外的復(fù)制標(biāo)識(shí),在訂閱者端也必須設(shè)置一個(gè)復(fù)制標(biāo)識(shí),它應(yīng)該由相同的或者少一些的列組成。如何設(shè)置復(fù)制標(biāo)識(shí)的細(xì)節(jié)請參考 REPLICA IDENTITY 。如果在復(fù)制UPDATEDELETE操作的發(fā)布中加入了沒有復(fù)制標(biāo)識(shí)的表,那么訂閱者上后續(xù)的UPDATEDELETE操作將導(dǎo)致錯(cuò)誤。不管有沒有復(fù)制標(biāo)識(shí),INSERT操作都能繼續(xù)下去。

每一個(gè)發(fā)布都可以由多個(gè)訂閱者。

Publication通過使用CREATE PUBLICATION命令創(chuàng)建并且可以在之后使用相應(yīng)的命令進(jìn)行修改或者刪除。

表可以使用ALTER PUBLICATION動(dòng)態(tài)地增加或者移除。ADD TABLE以及DROP TABLE操作都是事務(wù)性的,因此一旦該事務(wù)提交,該表將以正確的快照開始或者停止復(fù)制。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)