PostgreSQL 架構(gòu)

2021-09-01 17:50 更新
30.5.1. 初始快照

邏輯復(fù)制從拷貝發(fā)布者數(shù)據(jù)庫上的數(shù)據(jù)庫快照開始??截愐坏┩瓿?,發(fā)布者上的更改會在它們發(fā)生時實時傳送給訂閱者。訂閱者按照數(shù)據(jù)在發(fā)布者上被提交的順序應(yīng)用數(shù)據(jù),這樣任意單一訂閱中的發(fā)布的事務(wù)一致性才能得到保證。

邏輯復(fù)制被構(gòu)建在一種類似于物理流復(fù)制(見第 26.2.5 節(jié))的架構(gòu)上。它由walsenderapply進(jìn)程實現(xiàn)。walsender進(jìn)程開始對WAL的邏輯解碼(在 第 48 章中描述)并且載入標(biāo)準(zhǔn)邏輯解碼插件(pgoutput)。該插件把從WAL中讀取的更改轉(zhuǎn)換成邏輯復(fù)制協(xié)議(見第 52.5 節(jié))并且根據(jù)發(fā)布說明過濾數(shù)據(jù)。然后數(shù)據(jù)會被連續(xù)地使用流復(fù)制協(xié)議傳輸?shù)綉?yīng)用工作者,應(yīng)用工作者會把數(shù)據(jù)映射到本地表并且以正確的事務(wù)順序應(yīng)用它們接收到的更改。

訂閱者數(shù)據(jù)庫上的應(yīng)用進(jìn)程總是將session_replication_role設(shè)置為replica運行,這會產(chǎn)生觸發(fā)器和約束上通常的效果。

邏輯復(fù)制應(yīng)用進(jìn)程當(dāng)前僅會引發(fā)行觸發(fā)器,而不會引發(fā)語句觸發(fā)器。不過,初始的表同步是以類似一個COPY命令的方式實現(xiàn)的,因此會引發(fā)INSERT的行觸發(fā)器和語句觸發(fā)器。

30.5.1. 初始快照

已有的被訂閱表中的初始數(shù)據(jù)會被快照并且以一種特殊類型的應(yīng)用進(jìn)程的并行實例進(jìn)行拷貝。這種進(jìn)程將創(chuàng)建自己的臨時復(fù)制槽并且拷貝現(xiàn)有的數(shù)據(jù)。一旦現(xiàn)有的數(shù)據(jù)被拷貝完,工作者會進(jìn)入到同步模式,主應(yīng)用進(jìn)程會流式傳遞在使用標(biāo)準(zhǔn)邏輯復(fù)制拷貝初始數(shù)據(jù)期間發(fā)生的任意改變,這會確保表被帶到一種已同步的狀態(tài)。一旦同步完成,該表的復(fù)制的控制權(quán)會被交回給主應(yīng)用進(jìn)程,其中復(fù)制會照常繼續(xù)。


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號