53.5. ÐÑоÑокол логиÑеÑкой поÑоковой ÑепликаÑии #
Ð ÑÑом Ñазделе опиÑÑваеÑÑÑ Ð¿ÑоÑокол логиÑеÑкой ÑепликаÑии, ÑегламенÑиÑÑÑÑий поÑок ÑообÑений, коÑоÑÑй запÑÑкаеÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ ÑепликаÑии START_REPLICATION SLOT имÑ_ÑлоÑа LOGICAL.
ÐÑоÑокол логиÑеÑкой поÑоковой ÑепликаÑии поÑÑÑоен на пÑимиÑÐ¸Ð²Ð°Ñ Ð¿ÑоÑокола ÑизиÑеÑкой поÑоковой ÑепликаÑии.
РлогиÑеÑком декодиÑовании Postgres Pro поддеÑживаÑÑÑÑ Ð¼Ð¾Ð´Ñли вÑвода. СÑандаÑÑнÑй модÑÐ»Ñ pgoutput иÑполÑзÑеÑÑÑ Ð´Ð»Ñ Ð²ÑÑÑоенной логиÑеÑкой ÑепликаÑии.
53.5.1. ÐаÑамеÑÑÑ Ð¿ÑоÑокола логиÑеÑкой поÑоковой ÑепликаÑии #
ÐÑполÑзÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ START_REPLICATION, модÑÐ»Ñ pgoutput пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑледÑÑÑие паÑамеÑÑÑ:
- proto_version
ÐеÑÑÐ¸Ñ Ð¿ÑоÑокола. РнаÑÑоÑÑее вÑÐµÐ¼Ñ Ð¿Ð¾Ð´Ð´ÐµÑживаÑÑÑÑ ÑолÑко веÑÑии
1,2,3и4. ÐÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ ÑказÑваÑÑ ÑолÑко ÑабоÑÑÑ Ð²ÐµÑÑиÑ.ÐеÑÑиÑ
2, позволÑÑÑÐ°Ñ Ð¿ÐµÑедаваÑÑ Ð² поÑоке болÑÑие вÑполнÑÑÑиеÑÑ ÑÑанзакÑии, поддеÑживаеÑÑÑ ÑолÑко Ñ ÑеÑвеÑами веÑÑии 14 и вÑÑе.ÐеÑÑиÑ
3, позволÑÑÑÐ°Ñ Ð¿ÐµÑедаваÑÑ ÑикÑаÑÐ¸Ñ ÑÑанзакÑий в двÑÑ ÑÐ°Ð·Ð°Ñ , поддеÑживаеÑÑÑ ÑолÑко Ñ ÑеÑвеÑами веÑÑии 15 и вÑÑе.ÐеÑÑиÑ
4, позволÑÑÑÐ°Ñ Ð¿Ð°ÑаллелÑно пеÑедаваÑÑ Ð² поÑоке болÑÑие вÑполнÑÑÑиеÑÑ ÑÑанзакÑии, поддеÑживаеÑÑÑ ÑолÑко Ñ ÑеÑвеÑами веÑÑии 16 и вÑÑе.- publication_names
СпиÑок ÑазделÑннÑÑ Ð·Ð°Ð¿ÑÑÑми имÑн пÑбликаÑий, на коÑоÑÑе подпиÑÑваеÑÑÑ ÐºÐ»Ð¸ÐµÐ½Ñ (бÑÐ´ÐµÑ Ð¿Ð¾Ð»ÑÑаÑÑ Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ). Ðмена оÑделÑнÑÑ Ð¿ÑбликаÑий обÑабаÑÑваÑÑÑÑ ÐºÐ°Ðº ÑÑандаÑÑнÑе имена обÑекÑов и могÑÑ Ñак же заклÑÑаÑÑÑÑ Ð² кавÑÑки пÑи Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи. ТÑебÑеÑÑÑ ÑказÑваÑÑ Ñ Ð¾ÑÑ Ð±Ñ Ð¾Ð´Ð½Ð¾ Ð¸Ð¼Ñ Ð¿ÑбликаÑии.
- binary
ÐогиÑеÑкий паÑамеÑÑ, ÑказÑваÑÑий иÑполÑзоваÑÑ Ñежим двоиÑной пеÑедаÑи. ÐÑÐ¾Ñ Ñежим ÑабоÑÐ°ÐµÑ Ð±ÑÑÑÑее ÑекÑÑового, но ÑÑÑÑ Ð¼ÐµÐ½ÐµÐµ ÑÑÑойÑив.
- messages
ÐогиÑеÑкий паÑамеÑÑ, коÑоÑÑй вклÑÑÐ°ÐµÑ Ð¾ÑпÑÐ°Ð²ÐºÑ ÑообÑений, напиÑаннÑÑ ÑÑнкÑией
pg_logical_emit_message.- streaming
ÐаÑамеÑÑ, позволÑÑÑий вклÑÑиÑÑ Ð¿Ð¾ÑоковÑÑ Ð¿ÐµÑедаÑÑ ÑекÑÑÐ¸Ñ ÑÑанзакÑий. ÐозможнÑе знаÑениÑ
off(по ÑмолÑаниÑ),onиparallel. ÐнаÑениеparallelвклÑÑÐ°ÐµÑ Ð¾ÑпÑÐ°Ð²ÐºÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑной инÑоÑмаÑии Ñ Ð½ÐµÐºÐ¾ÑоÑÑми ÑообÑениÑми, коÑоÑÑе бÑдÑÑ Ð¸ÑполÑзоваÑÑÑÑ Ð´Ð»Ñ Ð¿Ð°ÑаллелÑного вÑполнениÑ. ÐÐ»Ñ Ð²ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ð¿Ð°ÑамеÑÑа (on) ÑÑебÑеÑÑÑ Ð¿ÑоÑокол не ниже веÑÑии2. ÐÑи Ñказании знаÑениÑparallelÑÑебÑеÑÑÑ Ð¿ÑоÑокол не ниже веÑÑии4.- two_phase
ÐогиÑеÑкий паÑамеÑÑ, вклÑÑаÑÑий двÑÑ ÑазнÑе ÑÑанзакÑии. ÐÐ»Ñ ÐµÐ³Ð¾ вклÑÑÐµÐ½Ð¸Ñ ÑÑебÑеÑÑÑ Ð¿ÑоÑокол не ниже веÑÑии
3.- origin
ÐаÑамеÑÑ Ð´Ð»Ñ Ð¾ÑпÑавки изменений по Ð¸Ñ Ð¿ÑоиÑÑ Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ. ÐозможнÑе знаÑениÑ:
none, ÑÑÐ¾Ð±Ñ Ð¾ÑпÑавлÑÑÑ ÑолÑко Ñе изменениÑ, Ð´Ð»Ñ ÐºÐ¾ÑоÑÑÑ Ð½Ðµ Ñказан иÑÑоÑник, илиany, ÑÑÐ¾Ð±Ñ Ð¾ÑпÑавлÑÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð½ÐµÐ·Ð°Ð²Ð¸Ñимо Ð¾Ñ Ð¸Ñ Ð¿ÑоиÑÑ Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ. ÐаннÑй паÑамеÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ иÑполÑзоваÑÑ, ÑÑÐ¾Ð±Ñ Ð¸Ð·Ð±ÐµÐ¶Ð°ÑÑ Ð·Ð°Ñикливаний (беÑконеÑной ÑепликаÑии Ð¾Ð´Ð½Ð¸Ñ Ð¸ ÑÐµÑ Ð¶Ðµ даннÑÑ ) Ð¼ÐµÐ¶Ð´Ñ Ñзлами ÑепликаÑии.
53.5.2. СообÑÐµÐ½Ð¸Ñ Ð¿ÑоÑокола логиÑеÑкой ÑепликаÑии #
ÐÑделÑнÑе ÑообÑÐµÐ½Ð¸Ñ Ð¿ÑоÑокола ÑаÑÑмаÑÑиваÑÑÑÑ Ð² ÑледÑÑÑÐ¸Ñ Ð¿Ð¾Ð´ÑÐ°Ð·Ð´ÐµÐ»Ð°Ñ . СобÑÑвенно ÑообÑÐµÐ½Ð¸Ñ Ð¾Ð¿Ð¸ÑÐ°Ð½Ñ Ð² Раздел 53.9.
ÐÑе ÑообÑÐµÐ½Ð¸Ñ Ð²ÐµÑÑ Ð½ÐµÐ³Ð¾ ÑÑÐ¾Ð²Ð½Ñ Ð½Ð°ÑинаÑÑÑÑ Ñ Ð±Ð°Ð¹Ñа, опÑеделÑÑÑего Ñип ÑообÑениÑ. ХоÑÑ Ð¾Ð½ пÑедÑÑавлен в коде ÑимволÑнÑм Ñипом, ÑÑо знаковÑй Ð±Ð°Ð¹Ñ Ð±ÐµÐ· Ñвно заданной кодиÑовки.
Так как в пÑоÑоколе поÑоковой ÑепликаÑии пеÑедаÑÑÑÑ Ð´Ð»Ð¸Ð½Ð° ÑообÑениÑ, Ð½ÐµÑ Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑи ÑказÑваÑÑ Ð´Ð»Ð¸Ð½Ñ Ð² Ð·Ð°Ð³Ð¾Ð»Ð¾Ð²ÐºÐ°Ñ ÑообÑений веÑÑ Ð½ÐµÐ³Ð¾ ÑÑовнÑ.
53.5.3. ÐоÑок ÑообÑений пÑоÑокола логиÑеÑкой ÑепликаÑии #
Ðа иÑклÑÑением ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ START_REPLICATION и ÑообÑений о пÑогÑеÑÑе воÑпÑоизведениÑ, веÑÑ Ð¸Ð½ÑоÑмаÑионнÑй поÑок напÑавлен Ð¾Ñ ÑеÑвеÑа к клиенÑÑ.
ÐÑоÑокол логиÑеÑкой ÑепликаÑии пеÑедаÑÑ Ð¾ÑделÑнÑе ÑÑанзакÑии Ð¾Ð´Ð½Ñ Ð·Ð° дÑÑгой. ÐÑо знаÑиÑ, ÑÑо вÑе ÑообÑÐµÐ½Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñ Ð¿Ð°Ñой ÑообÑений Begin и Commit оÑноÑÑÑÑÑ Ðº одной ÑÑанзакÑии. ТоÑно Ñак же к одной ÑÑанзакÑии оÑноÑÑÑÑÑ Ð²Ñе ÑообÑÐµÐ½Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñ Ð¿Ð°Ñой ÑообÑений Begin Prepare и Prepare. ÐÑÐ¾Ñ Ð¿ÑоÑокол Ñакже пеÑедаÑÑ ÑодеÑжимое болÑÑÐ¸Ñ ÑÑанзакÑий по Ñ Ð¾Ð´Ñ Ð¸Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¼ÐµÐ¶Ð´Ñ Ð¿Ð°Ñой ÑообÑений Stream Start и Stream Stop. ÐоÑледний поÑок Ð´Ð»Ñ Ñакой ÑÑанзакÑии ÑодеÑÐ¶Ð¸Ñ ÑообÑение Stream Commit или Stream Abort.
ÐÐ°Ð¶Ð´Ð°Ñ Ð¿ÐµÑÐµÐ´Ð°Ð²Ð°ÐµÐ¼Ð°Ñ ÑÑанзакÑÐ¸Ñ ÑодеÑÐ¶Ð¸Ñ Ð½Ð¾Ð»Ñ Ð¸Ð»Ð¸ более ÑообÑений DML (Insert, Update, Delete). РкаÑкадной ÑÑ ÐµÐ¼Ðµ она Ð¼Ð¾Ð¶ÐµÑ Ñакже ÑодеÑжаÑÑ ÑообÑÐµÐ½Ð¸Ñ Origin. ÐÑо ÑообÑение показÑваеÑ, ÑÑо ÑÑанзакÑÐ¸Ñ Ð¿ÑиÑла Ñ Ð´ÑÑгого Ñзла в ÑÑ ÐµÐ¼Ðµ ÑепликаÑии. Так как ÑÑим Ñзлом в конÑекÑÑе пÑоÑокола логиÑеÑкой ÑепликаÑии Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑÑо Ñгодно, единÑÑвеннÑм иденÑиÑикаÑоÑом ÑвлÑеÑÑÑ ÐµÐ³Ð¾ имÑ. Ðак воÑпÑинимаÑÑ ÑÑо Ð¸Ð¼Ñ (еÑли ÑÑо вообÑе нÑжно), опÑеделÑÑÑ Ð½Ð¸Ð¶ÐµÑÑоÑÑие ÑзлÑ. СообÑение Origin вÑегда пеÑедаÑÑÑÑ Ð¿ÐµÑед вÑеми оÑÑалÑнÑми ÑообÑениÑми DML в ÑÑанзакÑии.
Ðаждое DML-ÑообÑение ÑодеÑÐ¶Ð¸Ñ Ð¸Ð´ÐµÐ½ÑиÑикаÑÐ¾Ñ (OID) оÑноÑениÑ, коÑоÑÑй ÑказÑÐ²Ð°ÐµÑ Ð½Ð° Ñелевое оÑноÑение на ÑÑоÑоне пÑбликаÑии. ÐеÑед пеÑвÑм DML-ÑообÑением Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ OID оÑноÑÐµÐ½Ð¸Ñ Ð±ÑÐ´ÐµÑ Ð¾ÑпÑавлено ÑообÑение Relation, опиÑÑваÑÑее ÑÑ ÐµÐ¼Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ оÑноÑениÑ. ÐпоÑледÑÑвии бÑÐ´ÐµÑ Ð¾ÑпÑавлено новое ÑообÑение Relation, еÑли опÑеделение оÑноÑÐµÐ½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½Ð¸ÑÑÑ Ð¿Ð¾Ñле оÑпÑавки поÑледнего ÑообÑÐµÐ½Ð¸Ñ Relation. (РпÑоÑоколе пÑедполагаеÑÑÑ, ÑÑо ÐºÐ»Ð¸ÐµÐ½Ñ ÑÐ¼Ð¾Ð¶ÐµÑ ÐºÐµÑиÑоваÑÑ Ð¼ÐµÑаданнÑе Ð´Ð»Ñ Ð´Ð¾ÑÑаÑоÑно болÑÑого ÑиÑла оÑноÑений.)
Ð ÑообÑениÑÑ Relation ÑÐ¸Ð¿Ñ ÑÑолбÑов опÑеделÑÑÑÑÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑами (OID). ÐÐ»Ñ Ð²ÑÑÑоенного Ñипа пÑедполагаеÑÑÑ, ÑÑо ÐºÐ»Ð¸ÐµÐ½Ñ Ð¼Ð¾Ð¶ÐµÑ ÑазÑеÑиÑÑ ÑÑÐ¾Ñ OID локалÑно, поÑÑÐ¾Ð¼Ñ Ð½Ð¸ÐºÐ°ÐºÐ¸Ðµ дополниÑелÑнÑе даннÑе не нÑжнÑ. Ðднако Ð´Ð»Ñ Ð»ÑбÑÑ Ð´ÑÑÐ³Ð¸Ñ Ñипов пеÑед ÑообÑением Relation бÑÐ´ÐµÑ Ð¿ÐµÑедаваÑÑÑÑ ÑообÑение Type, ÑвÑзÑваÑÑее Ð¸Ð¼Ñ Ñипа Ñ Ð¾Ð¿ÑеделÑннÑм OID. Таким обÑазом, клиенÑ, коÑоÑÐ¾Ð¼Ñ Ð½Ñжно однознаÑно опÑеделÑÑÑ ÑÐ¸Ð¿Ñ ÑÑолбÑов в оÑноÑении, должен кеÑиÑоваÑÑ ÑодеÑжимое ÑообÑений Type, и в ÑлÑÑае обнаÑÑÐ¶ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑÑенного OID в кеÑе иÑполÑзоваÑÑ ÑÑÑ Ð¸Ð½ÑоÑмаÑиÑ, а в пÑоÑивном ÑлÑÑае ÑазÑеÑаÑÑ ÐµÐ³Ð¾ локалÑно.