pg_createsubscriber
pg_createsubscriber â пÑеобÑазоваÑÑ ÑизиÑеÑкÑÑ ÑÐµÐ¿Ð»Ð¸ÐºÑ Ð² новÑÑ Ð»Ð¾Ð³Ð¸ÑеÑкÑÑ ÑепликÑ
СинÑакÑиÑ
pg_createsubscriber [паÑамеÑÑ...] { -d | --database }имÑ_бд { -D | --pgdata }каÑалог_даннÑÑ
{ -P | --publisher-server }ÑÑÑока_подклÑÑениÑ
ÐпиÑание
pg_createsubscriber ÑоздаÑÑ Ð½Ð¾Ð²ÑÑ Ð»Ð¾Ð³Ð¸ÑеÑкÑÑ ÑÐµÐ¿Ð»Ð¸ÐºÑ Ð¸Ð· ÑезеÑвного ÑеÑвеÑа ÑизиÑеÑкой ÑепликаÑии. ÐÑе ÑаблиÑÑ Ñказанной Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ð²ÐºÐ»ÑÑаÑÑÑÑ Ð² ÑÑ ÐµÐ¼Ñ Ð»Ð¾Ð³Ð¸ÑеÑкой ÑепликаÑии. ÐÐ»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ ÑоздаÑÑÑÑ Ð¿Ð°Ñа обÑекÑов пÑбликаÑии и подпиÑки. УÑилиÑÑ Ð½Ñжно запÑÑкаÑÑ Ð½Ð° Ñелевом ÑеÑвеÑе.
ÐоÑле ÑÑпеÑного запÑÑка ÑоÑÑоÑние Ñелевого ÑеÑвеÑа не оÑлиÑаеÑÑÑ Ð¾Ñ Ð½Ð¾Ð²Ð¾Ð¹ ÑÑ ÐµÐ¼Ñ Ð»Ð¾Ð³Ð¸ÑеÑкой ÑепликаÑии. ÐдинÑÑвенное оÑлиÑие логиÑеÑкой ÑепликаÑии Ð¾Ñ Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼Ð° pg_createsubscriber в Ñом, как вÑполнÑеÑÑÑ ÑÐ¸Ð½Ñ ÑонизаÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ . УÑилиÑа не копиÑÑÐµÑ Ð¸ÑÑ Ð¾Ð´Ð½Ñе даннÑе ÑаблиÑÑ, а лиÑÑ Ð²ÑполнÑÐµÑ ÑÐ¸Ð½Ñ ÑонизаÑиÑ, ÑÑо позволÑÐµÑ Ð¿ÑивеÑÑи каждÑÑ ÑаблиÑÑ Ð² ÑÐ¸Ð½Ñ ÑонизиÑованное ÑоÑÑоÑние.
УÑилиÑа pg_createsubscriber пÑедназнаÑена Ð´Ð»Ñ ÐºÑÑпнÑÑ
баз даннÑÑ
, поÑколÑÐºÑ Ð¿Ñи логиÑеÑкой ÑепликаÑии болÑÑе вÑего вÑемени ÑÑ
Ð¾Ð´Ð¸Ñ Ð¸Ð¼ÐµÐ½Ð½Ð¾ на наÑалÑное копиÑование даннÑÑ
. ÐÑоме Ñого, в ÑезÑлÑÑаÑе длиÑелÑной ÑинÑ
ÑонизаÑии обÑÑно пÑиÑ
одиÑÑÑ Ð¿ÑименÑÑÑ Ð¼Ð½Ð¾Ð³Ð¾ изменений (коÑоÑÑе возникли пÑи наÑалÑном копиÑовании), из-за Ñего логиÑеÑÐºÐ°Ñ Ñеплика еÑÑ Ð´Ð¾Ð»ÑÑе оÑÑаÑÑÑÑ Ð½ÐµÐ´Ð¾ÑÑÑпной. ÐÐ»Ñ Ð½ÐµÐ±Ð¾Ð»ÑÑиÑ
баз даннÑÑ
ÑекомендÑеÑÑÑ Ð½Ð°ÑÑÑаиваÑÑ Ð»Ð¾Ð³Ð¸ÑеÑкÑÑ ÑепликаÑÐ¸Ñ Ñ Ð½Ð°ÑалÑной ÑинÑ
ÑонизаÑией даннÑÑ
. Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº паÑамеÑÑÑ CREATE SUBSCRIPTION copy_data.
ÐаÑамеÑÑÑ
pg_createsubscriber пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑледÑÑÑие аÑгÑменÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ ÑÑÑоки:
-dимÑ_бд--database=имÑ_бдÐÐ¼Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ , в коÑоÑой Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ ÑоздаÑÑ Ð¿Ð¾Ð´Ð¿Ð¸ÑкÑ. УкажиÑе неÑколÑко паÑамеÑÑов
-d, ÑÑÐ¾Ð±Ñ Ð²ÑбÑаÑÑ Ð½ÐµÑколÑко баз даннÑÑ .-DкаÑалог--pgdata=каÑалогЦелевой каÑалог, ÑодеÑжаÑий каÑалог клаÑÑеÑа ÑизиÑеÑкой Ñеплики.
-n--dry-runÐелаÑÑ Ð²ÑÑ, кÑоме внеÑÐµÐ½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ в Ñелевой каÑалог.
-pпоÑÑ--subscriber-port=поÑÑÐÐ¾Ð¼ÐµÑ Ð¿Ð¾ÑÑа, ÑеÑез коÑоÑÑй Ñелевой ÑеÑÐ²ÐµÑ Ð¿ÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑениÑ. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ñелевой ÑеÑÐ²ÐµÑ Ð·Ð°Ð¿ÑÑкаеÑÑÑ Ñ Ð¿Ð¾ÑÑом 50432, ÑÑÐ¾Ð±Ñ Ð½Ðµ допÑÑÑиÑÑ Ð½ÐµÐ¶ÐµÐ»Ð°ÑелÑнÑÑ ÐºÐ»Ð¸ÐµÐ½ÑÑÐºÐ¸Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑений.
-PÑÑÑока_подклÑÑениÑ--publisher-server=ÑÑÑока_подклÑÑениÑСÑÑока подклÑÑÐµÐ½Ð¸Ñ Ðº пÑбликÑÑÑÐµÐ¼Ñ ÑеÑвеÑÑ. ÐодÑобноÑÑи опиÑÐ°Ð½Ñ Ð² ÐодÑазделе 32.1.1.
-sкаÑалог--socketdir=каÑалогÐаÑалог, в коÑоÑом пÑоÑеÑÑ postmaster бÑÐ´ÐµÑ ÑоздаваÑÑ ÑокеÑÑ Ð½Ð° Ñелевом ÑеÑвеÑе. Ðо ÑмолÑÐ°Ð½Ð¸Ñ â ÑекÑÑий каÑалог.
-tÑекÑндÑ--recovery-timeout=ÑекÑндÑÐакÑималÑное вÑÐµÐ¼Ñ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ Ð²Ð¾ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ (в ÑекÑÐ½Ð´Ð°Ñ ). ÐнаÑение 0 (по ÑмолÑаниÑ) оÑклÑÑÐ°ÐµÑ ÑÑÐ¾Ñ Ñайм-аÑÑ.
-UимÑ_полÑзоваÑелÑ--subscriber-username=имÑ_полÑзоваÑелÑÐÐ¼Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ðº ÑÐµÐ»ÐµÐ²Ð¾Ð¼Ñ ÑеÑвеÑÑ. Ðо ÑмолÑÐ°Ð½Ð¸Ñ â Ð¸Ð¼Ñ ÑекÑÑего полÑзоваÑÐµÐ»Ñ Ð¾Ð¿ÐµÑаÑионной ÑиÑÑемÑ.
-v--verboseÐклÑÑÐ°ÐµÑ Ñежим подÑобнÑÑ ÑообÑений. ÐÑи вклÑÑÑнном паÑамеÑÑе pg_createsubscriber бÑÐ´ÐµÑ Ð²ÑводиÑÑ ÑообÑÐµÐ½Ð¸Ñ Ð¾ пÑоÑеÑÑе вÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¸ подÑобнÑÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¾ каждом Ñаге в ÑÑандаÑÑнÑй поÑок оÑибок. ÐÑли ÑказаÑÑ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¿Ð¾Ð²ÑоÑно, в ÑÑандаÑÑнÑй поÑок оÑибок бÑдÑÑ Ð²ÑдаваÑÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе оÑладоÑнÑе ÑообÑениÑ.
--config-file=имÑ_ÑайлаÐÑполÑзоваÑÑ ÑказаннÑй оÑновной Ñайл конÑигÑÑаÑии ÑеÑвеÑа Ð´Ð»Ñ Ñелевого каÑалога даннÑÑ . УÑилиÑа pg_createsubscriber иÑполÑзÑÐµÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ
pg_ctlÐ´Ð»Ñ Ð·Ð°Ð¿ÑÑка и оÑÑановки Ñелевого ÑеÑвеÑа. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÐµÑ ÑказÑваÑÑ ÑакÑиÑеÑкий Ñайл конÑигÑÑаÑииpostgresql.conf, еÑли он Ñ ÑаниÑÑÑ Ð·Ð° пÑеделами каÑалога даннÑÑ .--publication=имÑÐÐ¼Ñ Ð¿ÑбликаÑии Ð´Ð»Ñ Ð½Ð°ÑÑÑойки логиÑеÑкой ÑепликаÑии. ÐÑполÑзÑйÑе неÑколÑко паÑамеÑÑов
--publication, ÑÑÐ¾Ð±Ñ ÑказаÑÑ Ð½ÐµÑколÑко пÑбликаÑий. ЧиÑло пÑбликаÑий должно ÑовпадаÑÑ Ñ ÑиÑлом ÑказаннÑÑ Ð±Ð°Ð· даннÑÑ , в пÑоÑивном ÑлÑÑае вÑводиÑÑÑ ÑообÑение об оÑибке. ÐÑбликаÑии Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ ÑказÑваÑÑ Ð² Ñом же поÑÑдке, ÑÑо и Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ð² ÑооÑвеÑÑÑвÑÑÑем паÑамеÑÑе. ÐÑли не ÑказаÑÑ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ, пÑбликаÑии пÑиÑваиваеÑÑÑ ÑгенеÑиÑованное имÑ.--replication-slot=имÑÐÐ¼Ñ ÑлоÑа ÑепликаÑии Ð´Ð»Ñ Ð½Ð°ÑÑÑойки логиÑеÑкой ÑепликаÑии. ÐÑполÑзÑйÑе неÑколÑко паÑамеÑÑов
--replication-slot, ÑÑÐ¾Ð±Ñ ÑказаÑÑ Ð½ÐµÑколÑко ÑлоÑов ÑепликаÑии. ЧиÑло ÑлоÑов должно ÑовпадаÑÑ Ñ ÑиÑлом ÑказаннÑÑ Ð±Ð°Ð· даннÑÑ , в пÑоÑивном ÑлÑÑае вÑводиÑÑÑ Ð¾Ñибка. СлоÑÑ ÑепликаÑии Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ ÑказÑваÑÑ Ð² Ñом же поÑÑдке, ÑÑо и Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ð² ÑооÑвеÑÑÑвÑÑÑем паÑамеÑÑе. ÐÑли не ÑказаÑÑ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ, ÑлоÑÑ ÑепликаÑии пÑиÑваиваеÑÑÑ Ð¸Ð¼Ñ Ð¿Ð¾Ð´Ð¿Ð¸Ñки.--subscription=имÑÐÐ¼Ñ Ð¿Ð¾Ð´Ð¿Ð¸Ñки Ð´Ð»Ñ Ð½Ð°ÑÑÑойки логиÑеÑкой ÑепликаÑии. ÐÑполÑзÑйÑе неÑколÑко паÑамеÑÑов
--subscription, ÑÑÐ¾Ð±Ñ ÑказаÑÑ Ð½ÐµÑколÑко подпиÑок. ЧиÑло подпиÑок должно ÑовпадаÑÑ Ñ ÑиÑлом ÑказаннÑÑ Ð±Ð°Ð· даннÑÑ , в пÑоÑивном ÑлÑÑае вÑводиÑÑÑ Ð¾Ñибка. ÐодпиÑки Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ ÑказÑваÑÑ Ð² Ñом же поÑÑдке, ÑÑо и Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ð² ÑооÑвеÑÑÑвÑÑÑем паÑамеÑÑе. ÐÑли не ÑказаÑÑ ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ, подпиÑке пÑиÑваиваеÑÑÑ ÑгенеÑиÑованное имÑ.-V--versionÐÑвеÑÑи веÑÑÐ¸Ñ pg_createsubscriber и завеÑÑиÑÑÑÑ.
-?--helpÐÑвеÑÑи ÑпÑÐ°Ð²ÐºÑ Ð¾Ð± аÑгÑменÑÐ°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¾Ð¹ ÑÑÑоки pg_createsubscriber и завеÑÑиÑÑÑÑ.
ÐÑимеÑаниÑ
ÐÑедваÑиÑелÑнÑе ÑÑебованиÑ
СÑÑеÑÑвÑÑÑ Ð¾Ð¿ÑеделÑннÑе ÑÑебованиÑ, коÑоÑÑе Ð´Ð¾Ð»Ð¶Ð½Ñ Ð²ÑполнÑÑÑÑ, ÑÑÐ¾Ð±Ñ ÑÑилиÑа pg_createsubscriber могла пÑеобÑазоваÑÑ Ñелевой ÑеÑÐ²ÐµÑ Ð² логиÑеÑкÑÑ ÑепликÑ. ÐÑи иÑ
невÑполнении вÑводиÑÑÑ ÑообÑение об оÑибке. ÐÐ»Ñ ÐºÐ¾ÑÑекÑного иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ pg_createsubscriber оÑновнÑе веÑÑии иÑÑ
одного и Ñелевого ÑеÑвеÑа Ð´Ð¾Ð»Ð¶Ð½Ñ ÑовпадаÑÑ. У заданного Ñелевого каÑалога даннÑÑ
должен бÑÑÑ Ñакой же ÑиÑÑемнÑй иденÑиÑикаÑоÑ, как Ñ Ð¸ÑÑ
одного. ÐолÑзоваÑÐµÐ»Ñ Ð±Ð°Ð· даннÑÑ
, ÑказаннÑй Ð´Ð»Ñ Ñелевого каÑалога даннÑÑ
, должен имеÑÑ Ð¿Ñава на Ñоздание подпиÑок и иÑполÑзование ÑÑнкÑии pg_replication_origin_advance().
Целевой ÑеÑÐ²ÐµÑ Ð´Ð¾Ð»Ð¶ÐµÐ½ иÑполÑзоваÑÑÑÑ ÐºÐ°Ðº ÑезеÑвнÑй ÑеÑÐ²ÐµÑ ÑизиÑеÑкой ÑепликаÑии. Ðа Ñелевом ÑеÑвеÑе знаÑение паÑамеÑÑов конÑигÑÑаÑии max_replication_slots и max_logical_replication_workers должно бÑÑÑ Ð±Ð¾Ð»ÑÑе или Ñавно ÑиÑÐ»Ñ ÑказаннÑÑ Ð±Ð°Ð· даннÑÑ , а знаÑение паÑамеÑÑа max_worker_processes должно бÑÑÑ Ð±Ð¾Ð»ÑÑе ÑÑого ÑиÑла. Целевой ÑеÑÐ²ÐµÑ Ð´Ð¾Ð»Ð¶ÐµÐ½ пÑинимаÑÑ Ð»Ð¾ÐºÐ°Ð»ÑнÑе подклÑÑениÑ.
ÐÑÑ
однÑй ÑеÑÐ²ÐµÑ Ð´Ð¾Ð»Ð¶ÐµÐ½ пÑинимаÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ð¾Ñ Ñелевого ÑеÑвеÑа. ÐÑÑ
однÑй ÑеÑÐ²ÐµÑ Ð½Ðµ должен наÑ
одиÑÑÑÑ Ð² ÑоÑÑоÑнии воÑÑÑановлениÑ. Ðа иÑÑ
одном ÑеÑвеÑе паÑамеÑÑ ÐºÐ¾Ð½ÑигÑÑаÑии wal_level должен имеÑÑ Ð·Ð½Ð°Ñение logical, знаÑение паÑамеÑÑа max_replication_slots должно бÑÑÑ Ð±Ð¾Ð»ÑÑе или Ñавно ÑÑмме ÑказаннÑÑ
баз даннÑÑ
и ÑÑÑеÑÑвÑÑÑиÑ
ÑлоÑов ÑепликаÑии, а знаÑение паÑамеÑÑа max_wal_senders должно бÑÑÑ Ð±Ð¾Ð»ÑÑе или Ñавно ÑÑмме ÑказаннÑÑ
баз даннÑÑ
и ÑÑÑеÑÑвÑÑÑиÑ
пÑоÑеÑÑов пеÑедаÑи WAL.
ÐÑедÑпÑеждениÑ
ÐÑи наÑÑÑении ÑабоÑÑ pg_createsubscriber поÑле повÑÑÐµÐ½Ð¸Ñ Ñелевого ÑеÑвеÑа, веÑоÑÑнее вÑего, каÑалог даннÑÑ Ð½ÐµÐ»ÑÐ·Ñ Ð±ÑÐ´ÐµÑ Ð²Ð¾ÑÑÑановиÑÑ. ÐÑли ÑÑо пÑоизоÑло, ÑекомендÑеÑÑÑ ÑоздаÑÑ Ð½Ð¾Ð²Ñй ÑезеÑвнÑй ÑеÑвеÑ.
ÐÑи пÑеобÑазовании Ñеплик pg_createsubscriber обÑÑно запÑÑÐºÐ°ÐµÑ Ñелевой ÑеÑÐ²ÐµÑ Ñ Ð´ÑÑгими паÑамеÑÑами подклÑÑениÑ, поÑÑÐ¾Ð¼Ñ Ð² ÑÑÐ¾Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑиÑÑÑÑ Ðº Ð½ÐµÐ¼Ñ Ð½Ðµ полÑÑиÑÑÑ.
DDL-ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ Ð½Ðµ ÑÑаÑÑвÑÑÑ Ð² логиÑеÑкой ÑепликаÑии, поÑÑÐ¾Ð¼Ñ Ð¿Ñи ÑабоÑе Ñ pg_createsubscriber Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ избегаÑÑ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´, изменÑÑÑÐ¸Ñ ÑÑ ÐµÐ¼Ñ Ð±Ð°Ð· даннÑÑ . ÐÑли Ñелевой ÑеÑÐ²ÐµÑ Ñже пÑеобÑазован в логиÑеÑкÑÑ ÑепликÑ, DDL-командÑ, веÑоÑÑно, не бÑдÑÑ ÑеплиÑиÑованÑ, ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð²ÑзваÑÑ Ð¾ÑибкÑ.
ÐÑи наÑÑÑении ÑабоÑÑ pg_createsubscriber во вÑÐµÐ¼Ñ Ð¾Ð±ÑабоÑки даннÑÑ ÑдалÑÑÑÑÑ Ð¾Ð±ÑекÑÑ (пÑбликаÑии, ÑлоÑÑ ÑепликаÑии), ÑозданнÑе на иÑÑ Ð¾Ð´Ð½Ð¾Ð¼ ÑеÑвеÑе. ÐÑли ÑÐµÐ»ÐµÐ²Ð¾Ð¼Ñ ÑеÑвеÑÑ Ð½Ðµ ÑдаÑÑÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑÑиÑÑÑÑ Ðº иÑÑ Ð¾Ð´Ð½Ð¾Ð¼Ñ ÑеÑвеÑÑ, Ñдаление Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð²ÐµÑÑиÑÑÑÑ Ð¾Ñибкой. Ð ÑÑом ÑлÑÑае пÑедÑпÑеждение Ð¿Ð¾ÐºÐ°Ð¶ÐµÑ Ð¾Ð±ÑекÑÑ, коÑоÑÑе не бÑли ÑдаленÑ. ÐапÑÑеннÑй Ñелевой ÑеÑÐ²ÐµÑ Ð±ÑÐ´ÐµÑ Ð¾ÑÑановлен.
ÐÑли Ð´Ð»Ñ ÑепликаÑии иÑполÑзÑеÑÑÑ Ð¿Ð°ÑамеÑÑ primary_slot_name, ÑÑÐ¾Ñ ÑÐ»Ð¾Ñ Ð±ÑÐ´ÐµÑ ÑдалÑн Ñ Ð¸ÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ ÑеÑвеÑа поÑле наÑÑÑойки логиÑеÑкой ÑепликаÑии.
ÐÑли Ñелевой ÑеÑÐ²ÐµÑ ÑвлÑеÑÑÑ ÑÐ¸Ð½Ñ Ñонной Ñепликой, пÑи ÑабоÑе pg_createsubscriber ÑÑанзакÑии на ведÑÑем ÑеÑвеÑе могÑÑ Ð¾Ð¶Ð¸Ð´Ð°ÑÑ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ ÑепликаÑии.
УÑилиÑа pg_createsubscriber наÑÑÑÐ°Ð¸Ð²Ð°ÐµÑ Ð»Ð¾Ð³Ð¸ÑеÑкÑÑ ÑепликаÑÐ¸Ñ Ñ Ð¾ÑклÑÑÑнной двÑÑ
Ñазной ÑикÑаÑией. ÐÑо ознаÑаеÑ, ÑÑо лÑбÑе подгоÑовленнÑе ÑÑанзакÑии бÑдÑÑ ÑеплиÑиÑоваÑÑÑÑ Ð²Ð¾ вÑÐµÐ¼Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¾Ð¿ÐµÑаÑоÑа COMMIT PREPARED без пÑедваÑиÑелÑной подгоÑовки. ÐоÑле завеÑÑÐµÐ½Ð¸Ñ Ð½Ð°ÑÑÑойки можно вÑÑÑнÑÑ ÑдалÑÑÑ Ð¸ ÑоздаваÑÑ Ð¿Ð¾Ð´Ð¿Ð¸Ñки заново Ñ Ð²ÐºÐ»ÑÑÑннÑм паÑамеÑÑом two_phase.
pg_createsubscriber изменÑÐµÑ ÑиÑÑемнÑй иденÑиÑикаÑÐ¾Ñ Ð¿Ñи помоÑи ÑÑилиÑÑ pg_resetwal, коÑоÑÐ°Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÐµÑ Ð¸Ð·Ð±ÐµÐ³Ð°ÑÑ ÑиÑÑаÑий, когда Ñелевой ÑеÑÐ²ÐµÑ Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑ ÑÐ°Ð¹Ð»Ñ WAL иÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ ÑеÑвеÑа. ÐÑли Ñ Ñелевого ÑеÑвеÑа еÑÑÑ ÑезеÑвнÑй ÑеÑвеÑ, ÑепликаÑÐ¸Ñ Ð¿ÑеÑвÑÑÑÑ Ð¸ нÑжно бÑÐ´ÐµÑ ÑоздаÑÑ Ð½Ð¾Ð²Ñй ÑезеÑвнÑй ÑеÑвеÑ.
Ðак ÑÑо ÑабоÑаеÑ
ÐÑÐ½Ð¾Ð²Ð½Ð°Ñ Ð¸Ð´ÐµÑ ÑоÑÑÐ¾Ð¸Ñ Ð² Ñом, ÑÑÐ¾Ð±Ñ Ð¸Ð¼ÐµÑÑ Ð½Ð°ÑалÑнÑÑ ÑоÑÐºÑ ÑепликаÑии Ñ Ð¸ÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ ÑеÑвеÑа и наÑÑÑоиÑÑ Ð½Ð°Ñало логиÑеÑкой ÑепликаÑии Ñ ÑÑой ÑоÑки:
ÐапÑÑÑиÑÑ Ñелевой ÑеÑÐ²ÐµÑ Ñ ÑказаннÑми паÑамеÑÑами командной ÑÑÑоки. ÐÑли он Ñже запÑÑен, pg_createsubscriber завеÑÑиÑÑÑ Ñ Ð¾Ñибкой.
ÐÑовеÑиÑÑ, можно ли пÑеобÑазоваÑÑ Ñелевой ÑеÑвеÑ. Также вÑполнÑеÑÑÑ Ð½ÐµÑколÑко пÑовеÑок иÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ ÑеÑвеÑа. ÐÑли какое-либо из пÑедваÑиÑелÑнÑÑ ÑÑебований не вÑполнено, pg_createsubscriber завеÑÑиÑÑÑ Ð¾Ñибкой.
СоздаÑÑ Ð¿ÑбликаÑÐ¸Ñ Ð¸ ÑÐ»Ð¾Ñ ÑепликаÑии Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ Ñказанной Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ð½Ð° иÑÑ Ð¾Ð´Ð½Ð¾Ð¼ ÑеÑвеÑе. ÐÐ°Ð¶Ð´Ð°Ñ Ð¿ÑбликаÑÐ¸Ñ ÑоздаÑÑÑÑ Ñ Ð¸ÑполÑзованием паÑамеÑÑа
FOR ALL TABLES. ÐÑли паÑамеÑÑ--publicationне Ñказан, Ð¸Ð¼Ñ Ð¿ÑбликаÑии задаÑÑÑÑ Ð¿Ð¾ ÑледÑÑÑÐµÐ¼Ñ ÑаблонÑ: «pg_createsubscriber_%u_%x» (паÑамеÑÑÑ:oidÐ±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ , ÑлÑÑайное Ñелое ÑиÑлоint). ÐÑли паÑамеÑÑ--replication-slotне Ñказан, Ð¸Ð¼Ñ ÑлоÑа ÑепликаÑии задаÑÑÑÑ Ð¿Ð¾ ÑледÑÑÑÐµÐ¼Ñ ÑаблонÑ: «pg_createsubscriber_%u_%x» (паÑамеÑÑÑ:oidÐ±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ , ÑлÑÑайное Ñелое ÑиÑлоint). ÐÑи ÑлоÑÑ ÑепликаÑии бÑдÑÑ Ð¸ÑполÑзоваÑÑÑÑ Ð¿Ð¾Ð´Ð¿Ð¸Ñками на ÑледÑÑÑем Ñаге. ÐоÑледний LSN Ð´Ð»Ñ ÑлоÑа ÑепликаÑии иÑполÑзÑеÑÑÑ Ð² каÑеÑÑве ÑоÑки оÑÑановки в паÑамеÑÑе recovery_target_lsn, а подпиÑками иÑполÑзÑеÑÑÑ Ð² каÑеÑÑве наÑалÑной ÑоÑки ÑепликаÑии. Таким обÑазом гаÑанÑиÑÑеÑÑÑ, ÑÑо ни одна ÑÑанзакÑÐ¸Ñ Ð½Ðµ бÑÐ´ÐµÑ Ð¿Ð¾ÑеÑÑна.ÐапиÑаÑÑ Ð¿Ð°ÑамеÑÑÑ Ð²Ð¾ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð² Ñелевой каÑалог даннÑÑ Ð¸ пеÑезапÑÑÑиÑÑ Ñелевой ÑеÑвеÑ. УказÑÐ²Ð°ÐµÑ LSN (recovery_target_lsn) позиÑии в жÑÑнале пÑедзапиÑи, до коÑоÑой должно вÑполнÑÑÑÑÑ Ð²Ð¾ÑÑÑановление. Также ÑказÑваеÑ
promoteв каÑеÑÑве дейÑÑвиÑ, коÑоÑое должен вÑполниÑÑ ÑеÑÐ²ÐµÑ Ð¿Ð¾Ñле доÑÑÐ¸Ð¶ÐµÐ½Ð¸Ñ ÑоÑки воÑÑÑановлениÑ. ÐобавлÑÑÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе паÑамеÑÑÑ Ð²Ð¾ÑÑÑановлениÑ, ÑÑÐ¾Ð±Ñ Ð¸Ð·Ð±ÐµÐ¶Ð°ÑÑ Ð½ÐµÐ¿Ñедвиденного Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð²Ð¾ вÑÐµÐ¼Ñ Ð¿ÑоÑеÑÑа воÑÑÑановлениÑ, напÑÐ¸Ð¼ÐµÑ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ Ð²Ð¾ÑÑÑÐ°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñи доÑÑижении ÑоглаÑованного ÑоÑÑоÑÐ½Ð¸Ñ (WAL должен пÑименÑÑÑÑÑ Ð´Ð¾ ÑоÑки наÑала ÑепликаÑии) или поÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð¼Ð½Ð¾Ð¶ÐµÑÑвеннÑÑ ÑоÑек воÑÑÑановлениÑ, коÑоÑÑе могÑÑ Ð¿ÑивеÑÑи к ÑбоÑ. ÐÑÐ¾Ñ Ñаг завеÑÑаеÑÑÑ Ð¿Ð¾Ñле вÑÑ Ð¾Ð´Ð° ÑеÑвеÑа из Ñежима ÑезеÑва и наÑала пÑиÑма ÑÑанзакÑий ÑÑениÑ-запиÑи. ÐÑи заданном паÑамеÑÑе--recovery-timeoutÑÑилиÑа pg_createsubscriber завеÑÑÐ°ÐµÑ ÑабоÑÑ, еÑли воÑÑÑановление не заканÑиваеÑÑÑ Ð´Ð¾ иÑÑеÑÐµÐ½Ð¸Ñ Ñказанного колиÑеÑÑва ÑекÑнд.СоздаÑÑ Ð¿Ð¾Ð´Ð¿Ð¸ÑÐºÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ Ñказанной Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ð½Ð° Ñелевом ÑеÑвеÑе. ÐÑли паÑамеÑÑ
--subscriptionне Ñказан, Ð¸Ð¼Ñ Ð¿Ð¾Ð´Ð¿Ð¸Ñки задаÑÑÑÑ Ð¿Ð¾ ÑледÑÑÑÐµÐ¼Ñ ÑаблонÑ: «pg_createsubscriber_%u_%x» (паÑамеÑÑÑ:oidÐ±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ , ÑлÑÑайное Ñелое ÑиÑлоint). ÐодпиÑка не копиÑÑÐµÑ ÑÑÑеÑÑвÑÑÑие даннÑе Ñ Ð¸ÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ ÑеÑвеÑа и не ÑоздаÑÑ ÑÐ»Ð¾Ñ ÑепликаÑии. Ðна иÑполÑзÑÐµÑ ÑÐ»Ð¾Ñ ÑепликаÑии, коÑоÑÑй бÑл Ñоздан на пÑедÑдÑÑем ÑÑапе. ÐодпиÑка Ñоздана, но еÑÑ Ð½Ðµ акÑивиÑована, поÑÐ¾Ð¼Ñ ÑÑо, пÑежде Ñем наÑаÑÑ ÑепликаÑиÑ, ÐµÑ Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ðµ нÑжно ÑÑÑановиÑÑ Ð½Ð° наÑалÑнÑÑ ÑоÑкÑ.УдалиÑÑ Ð½Ð° Ñелевом ÑеÑвеÑе пÑбликаÑии, Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÐºÐ¾ÑоÑÑÑ Ð±Ñли ÑеплиÑиÑованÑ, Ñак как они бÑли ÑÐ¾Ð·Ð´Ð°Ð½Ñ Ð´Ð¾ ÑоÑки наÑала ÑепликаÑии. ÐодпиÑÑик не ÑÐ¼Ð¾Ð¶ÐµÑ Ð¸Ñ Ð¸ÑполÑзоваÑÑ.
УÑÑановиÑÑ Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ðµ ÑепликаÑии в наÑалÑнÑÑ ÑоÑÐºÑ ÑепликаÑии Ð´Ð»Ñ Ð²ÑÐµÑ Ð¿Ð¾Ð´Ð¿Ð¸Ñок. Ðогда Ñелевой ÑеÑÐ²ÐµÑ Ð½Ð°ÑÐ¸Ð½Ð°ÐµÑ Ð²Ð¾ÑÑÑановление, он нагонÑÐµÑ Ð½Ð°ÑалÑнÑÑ ÑоÑÐºÑ ÑепликаÑии. Ðменно ÑÑÐ¾Ñ LSN должен иÑполÑзоваÑÑÑÑ Ð² каÑеÑÑве иÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ ÑепликаÑии Ð´Ð»Ñ Ð²ÑÐµÑ Ð¿Ð¾Ð´Ð¿Ð¸Ñок. ÐÐ¼Ñ Ð¸ÑÑоÑника ÑепликаÑии поÑÑÑÐ¿Ð°ÐµÑ Ð¸Ð·-за ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð´Ð¿Ð¸Ñки. ÐÐ¼Ñ Ð¸ÑÑоÑника ÑепликаÑии и наÑалÑÐ½Ð°Ñ ÑоÑка ÑепликаÑии иÑполÑзÑÑÑÑÑ ÑÑнкÑией
pg_replication_origin_advance(), ÑÑÐ¾Ð±Ñ ÑÑÑановиÑÑ Ð¸ÑÑ Ð¾Ð´Ð½Ð¾Ðµ положение ÑепликаÑии.ÐкÑивиÑоваÑÑ Ð¿Ð¾Ð´Ð¿Ð¸ÑÐºÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ Ñказанной Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ð½Ð° Ñелевом ÑеÑвеÑе. ÐодпиÑка наÑÐ¸Ð½Ð°ÐµÑ Ð¿ÑименÑÑÑ ÑÑанзакÑии Ñ Ð½Ð°ÑалÑной ÑоÑки ÑепликаÑии.
ÐÑли на ÑезеÑвном ÑеÑвеÑе бÑл ÑÑÑановлен паÑамеÑÑ primary_slot_name, ÑепеÑÑ ÐµÐ³Ð¾ можно ÑдалиÑÑ Ð·Ð° ненадобноÑÑÑÑ.
ÐÑли на ÑезеÑвном ÑеÑвеÑе еÑÑÑ ÑлоÑÑ ÑепликаÑии Ð´Ð»Ñ Ð¾ÑÑабоÑки оÑказа, Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ ÑдалиÑÑ Ð¸Ð·-за невозможноÑÑи далÑнейÑей ÑÐ¸Ð½Ñ ÑонизаÑии.
ÐбновиÑÑ ÑиÑÑемнÑй иденÑиÑикаÑÐ¾Ñ Ð½Ð° Ñелевом ÑеÑвеÑе. ÐÐ»Ñ ÐµÐ³Ð¾ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑÑкаеÑÑÑ ÑÑилиÑа pg_resetwal. Целевой ÑеÑÐ²ÐµÑ Ð¾ÑÑанавливаеÑÑÑ â ÑÑо обÑзаÑелÑное ÑÑловие Ð´Ð»Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ
pg_resetwal.
ÐÑимеÑÑ
ÐÑполÑзÑйÑе ÑледÑÑÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ, ÑÑÐ¾Ð±Ñ ÑоздаÑÑ Ð»Ð¾Ð³Ð¸ÑеÑкÑÑ ÑÐµÐ¿Ð»Ð¸ÐºÑ Ð´Ð»Ñ Ð±Ð°Ð· даннÑÑ
hr и finance из ÑизиÑеÑкой Ñеплики, подклÑÑивÑиÑÑ Ðº пÑбликÑÑÑÐµÐ¼Ñ ÑеÑвеÑÑ foo:
$pg_createsubscriber -D /usr/local/pgsql/data -P "host=foo" -d hr -d finance