47.2. ÐонÑепÑии логиÑеÑкого декодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ #
47.2.1. ÐогиÑеÑкое декодиÑование #
ÐогиÑеÑкое декодиÑование â ÑÑо пÑоÑедÑÑа извлеÑÐµÐ½Ð¸Ñ Ð²ÑÐµÑ Ð¿Ð¾ÑÑоÑннÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹, пÑоиÑÑ Ð¾Ð´ÑÑÐ¸Ñ Ð² ÑаблиÑÐ°Ñ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ , в ÑоглаÑованном и понÑÑном ÑоÑмаÑе, коÑоÑÑй можно инÑеÑпÑеÑиÑоваÑÑ, не Ð¸Ð¼ÐµÑ Ð¿Ð¾Ð»Ð½Ð¾Ð³Ð¾ пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾ внÑÑÑеннем ÑоÑÑоÑнии Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ .
Ð PostgreSQL логиÑеÑкое декодиÑование ÑеализÑеÑÑÑ Ð¿ÑÑÑм пеÑевода ÑодеÑжимого жÑÑнала пÑедзапиÑи, опиÑÑваÑÑего Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð½Ð° ÑÑовне Ñ ÑанениÑ, в ÑпеÑиалÑнÑÑ ÑоÑÐ¼Ñ ÑÑÐ¾Ð²Ð½Ñ Ð¿ÑиложениÑ, напÑимеÑ, в поÑок коÑÑежей или опеÑаÑоÑов SQL.
47.2.2. СлоÑÑ ÑепликаÑии #
РконÑекÑÑе логиÑеÑкой ÑепликаÑии ÑÐ»Ð¾Ñ Ð¿ÑедÑÑавлÑÐµÑ Ð¿Ð¾Ñок изменений, коÑоÑÑе могÑÑ Ð±ÑÑÑ Ð²Ð¾ÑпÑÐ¾Ð¸Ð·Ð²ÐµÐ´ÐµÐ½Ñ ÐºÐ»Ð¸ÐµÐ½Ñом в Ñом поÑÑдке, в каком они пÑоиÑÑ Ð¾Ð´Ð¸Ð»Ð¸ на иÑÑ Ð¾Ð´Ð½Ð¾Ð¼ ÑеÑвеÑе. ЧеÑез каждÑй ÑÐ»Ð¾Ñ Ð¿ÐµÑедаÑÑÑÑ Ð¿Ð¾ÑледоваÑелÑноÑÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ в одной базе даннÑÑ .
ÐÑимеÑание
Ð PostgreSQL Ñакже еÑÑÑ ÑлоÑÑ Ð¿Ð¾Ñоковой ÑепликаÑии (Ñм. ÐодÑаздел 26.2.5), но они иÑполÑзÑÑÑÑÑ Ð½ÐµÑколÑко по-дÑÑгомÑ.
СлоÑÑ ÑепликаÑии назнаÑаеÑÑÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑ, ÑникалÑнÑй Ð´Ð»Ñ Ð²ÑÐµÑ Ð±Ð°Ð· даннÑÑ Ð² клаÑÑеÑе PostgreSQL. СлоÑÑ ÑÐ¾Ñ ÑанÑÑÑÑÑ Ð½ÐµÐ·Ð°Ð²Ð¸Ñимо Ð¾Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑений, иÑполÑзÑÑÑÐ¸Ñ Ð¸Ñ , и заÑиÑÐµÐ½Ñ Ð¾Ñ Ñбоев ÑеÑвеÑа.
ÐÑи обÑÑнÑÑ ÑÑловиÑÑ ÑеÑез логиÑеÑкий ÑÐ»Ð¾Ñ ÐºÐ°Ð¶Ð´Ð¾Ðµ изменение пеÑедаÑÑÑÑ ÑолÑко один Ñаз. ТекÑÑÐ°Ñ Ð¿Ð¾Ð·Ð¸ÑÐ¸Ñ Ð² каждом ÑлоÑе ÑÐ¾Ñ ÑанÑеÑÑÑ ÑолÑко в конÑÑолÑной ÑоÑке, Ñак ÑÑо в ÑлÑÑае ÑÐ±Ð¾Ñ ÑÐ»Ð¾Ñ Ð¼Ð¾Ð³ веÑнÑÑÑÑÑ Ðº пÑедÑдÑÑÐµÐ¼Ñ LSN, вÑледÑÑвие Ñего поÑледние Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð¿ÐµÑÐµÐ´Ð°Ð½Ñ Ð¿Ð¾Ð²ÑоÑно пÑи пеÑезапÑÑке ÑеÑвеÑа. Ðа иÑклÑÑение нежелаÑелÑнÑÑ ÑÑÑекÑов Ð¾Ñ Ð¿Ð¾Ð²ÑоÑной обÑабоÑки одного и Ñого же ÑообÑÐµÐ½Ð¸Ñ Ð¾ÑвеÑаÑÑ ÐºÐ»Ð¸ÐµÐ½ÑÑ Ð»Ð¾Ð³Ð¸ÑеÑкого декодиÑованиÑ. ÐлиенÑÑ Ð¼Ð¾Ð³ÑÑ Ð·Ð°Ð¿Ð¾Ð¼Ð¸Ð½Ð°ÑÑ Ð¿Ñи декодиÑовании, какой поÑледний LSN они Ñже полÑÑали, и пÑопÑÑкаÑÑ Ð¿Ð¾Ð²ÑоÑÑÑÑиеÑÑ Ð´Ð°Ð½Ð½Ñе или (пÑи иÑполÑзовании пÑоÑокола ÑепликаÑии) запÑаÑиваÑÑ, ÑÑÐ¾Ð±Ñ Ð´ÐµÐºÐ¾Ð´Ð¸Ñование наÑиналоÑÑ Ñ ÑÑого LSN, а не Ñ Ð¿Ð¾Ð·Ð¸Ñии, вÑбиÑаемой ÑеÑвеÑом. ÐÐ»Ñ ÑÑого ÑазÑабоÑан Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼ оÑÑÐ»ÐµÐ¶Ð¸Ð²Ð°Ð½Ð¸Ñ ÑепликаÑии, о коÑоÑом можно ÑзнаÑÑ Ð¿Ð¾Ð´Ñобнее в опиÑании иÑÑоÑников ÑепликаÑии.
ÐÐ»Ñ Ð¾Ð´Ð½Ð¾Ð¹ Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ Ð¼Ð¾Ð³ÑÑ ÑÑÑеÑÑвоваÑÑ Ð½ÐµÑколÑко незавиÑимÑÑ ÑлоÑов. ÐаждÑй ÑÐ»Ð¾Ñ Ð¸Ð¼ÐµÐµÑ ÑобÑÑвенное ÑоÑÑоÑние, ÑÑо позволÑÐµÑ ÑазлиÑнÑм поÑÑебиÑелÑм полÑÑаÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ ÑазнÑÑ Ð¿Ð¾Ð·Ð¸Ñий в поÑоке изменений Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ . ÐÐ»Ñ Ð±Ð¾Ð»ÑÑинÑÑва пÑиложений ÐºÐ°Ð¶Ð´Ð¾Ð¼Ñ Ð¿Ð¾ÑÑебиÑÐµÐ»Ñ ÑÑебÑеÑÑÑ Ð¾ÑделÑнÑй ÑлоÑ.
Ð¡Ð»Ð¾Ñ Ð»Ð¾Ð³Ð¸ÑеÑкой ÑепликаÑии ниÑего не Ð·Ð½Ð°ÐµÑ Ð¾ ÑоÑÑоÑнии полÑÑаÑелÑ(ей). Ðозможно даже имеÑÑ Ð½ÐµÑколÑко ÑазлиÑнÑÑ Ð¿Ð¾ÑÑебиÑелей одного ÑлоÑа в ÑазнÑе моменÑÑ Ð²Ñемени; они пÑоÑÑо бÑдÑÑ Ð¿Ð¾Ð»ÑÑаÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñа, когда Ð¸Ñ Ð¿ÐµÑеÑÑал полÑÑаÑÑ Ð¿ÑедÑдÑÑий поÑÑебиÑелÑ. Ðо в лÑбой опÑеделÑннÑй Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð¿Ð¾Ð»ÑÑаÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ ÑолÑко один поÑÑебиÑелÑ.
ÐогиÑеÑкий ÑÐ»Ð¾Ñ ÑепликаÑии Ñакже можно ÑоздаÑÑ Ð½Ð° ÑеÑвеÑе гоÑÑÑего ÑезеÑва. ЧÑÐ¾Ð±Ñ Ð·Ð°Ð¿ÑеÑиÑÑ VACUUM ÑдалÑÑÑ ÑÑебÑемÑе ÑÑÑоки из ÑиÑÑемнÑÑ
каÑалогов, на ÑезеÑвном ÑеÑвеÑе необÑ
одимо ÑÑÑановиÑÑ Ð¿Ð°ÑамеÑÑ hot_standby_feedback. ÐеÑмоÑÑÑ Ð½Ð° ÑÑо, еÑли какие-либо ÑÑебÑемÑе ÑÑÑоки бÑдÑÑ ÑдаленÑ, ÑÐ»Ð¾Ñ ÑÑÐ°Ð½ÐµÑ Ð°Ð½Ð½ÑлиÑован. ÐаÑÑоÑÑелÑно ÑекомендÑеÑÑÑ Ð¸ÑполÑзоваÑÑ ÑизиÑеÑкий ÑÐ»Ð¾Ñ Ð¼ÐµÐ¶Ð´Ñ Ð²ÐµÐ´ÑÑим и ÑезеÑвнÑм ÑеÑвеÑом. РпÑоÑивном ÑлÑÑае hot_standby_feedback бÑÐ´ÐµÑ ÑабоÑаÑÑ ÑолÑко пока Ñоединение акÑивно (напÑимеÑ, пеÑезапÑÑк Ñзла Ð¼Ð¾Ð¶ÐµÑ ÑазоÑваÑÑ Ñоединение). ÐаÑем ведÑÑий ÑеÑÐ²ÐµÑ Ð¼Ð¾Ð¶ÐµÑ ÑдалиÑÑ ÑÑÑоки ÑиÑÑемного каÑалога, коÑоÑÑе могÑÑ Ð¿Ð¾ÑÑебоваÑÑÑÑ Ð´Ð»Ñ Ð»Ð¾Ð³Ð¸ÑеÑкого декодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð½Ð° ÑезеÑвном ÑеÑвеÑе (поÑколÑÐºÑ Ð²ÐµÐ´ÑÑий ÑеÑÐ²ÐµÑ Ð½Ðµ Ð·Ð½Ð°ÐµÑ Ð¾ catalog_xmin на ÑезеÑвном ÑеÑвеÑе). СÑÑеÑÑвÑÑÑие логиÑеÑкие ÑлоÑÑ Ð² Ñежиме Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ Ñакже ÑÑановÑÑÑÑ Ð½ÐµÐ´ÐµÐ¹ÑÑвиÑелÑнÑми, еÑли знаÑение wal_level на оÑновном ÑеÑвеÑе ÑÑановиÑÑÑ Ð½Ð¸Ð¶Ðµ logical. ÐÑо пÑоиÑÑ
одиÑ, как ÑолÑко ÑезеÑвнÑй ÑеÑÐ²ÐµÑ Ð¾Ð±Ð½Ð°ÑÑÐ¶Ð¸Ð²Ð°ÐµÑ Ñакое изменение в поÑоке WAL и ознаÑаеÑ, ÑÑо Ð´Ð»Ñ Ð¾ÑÑÑаÑÑиÑ
пÑоÑеÑÑов walsender (еÑли ÑаковÑе имеÑÑÑÑ) некоÑоÑÑе запиÑи WAL до Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿Ð°ÑамеÑÑа wal_level на ведÑÑем ÑеÑвеÑе не бÑдÑÑ Ð´ÐµÐºÐ¾Ð´Ð¸ÑованÑ.
ÐÐ»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ Ð»Ð¾Ð³Ð¸ÑеÑкого ÑлоÑа необÑ
одима инÑоÑмаÑÐ¸Ñ Ð¾Ð±Ð¾ вÑеÑ
ÑекÑÑиÑ
ÑÑанзакÑиÑÑ
. Ðа ведÑÑем ÑеÑвеÑе ÑÑа инÑоÑмаÑÐ¸Ñ Ð´Ð¾ÑÑÑпна напÑÑмÑÑ, а на ÑезеÑвном ÐµÑ Ð½ÐµÐ¾Ð±Ñ
одимо полÑÑаÑÑ Ð¾Ñ Ð²ÐµÐ´ÑÑего. Таким обÑазом, пÑи Ñоздании ÑлоÑа Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾ÑÑебоваÑÑÑÑ Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ðµ какиÑ
-либо дейÑÑвий на ведÑÑем ÑеÑвеÑе. ÐÑли ведÑÑий ÑеÑÐ²ÐµÑ Ð¿ÑоÑÑаиваеÑ, Ñоздание логиÑеÑкого ÑлоÑа на ÑезеÑвном Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð½ÑÑÑ Ð¼Ð½Ð¾Ð³Ð¾ вÑемени. ÐÑо вÑÐµÐ¼Ñ Ð¼Ð¾Ð¶Ð½Ð¾ ÑокÑаÑиÑÑ, вÑзвав ÑÑнкÑÐ¸Ñ pg_log_standby_snapshot на ведÑÑем ÑеÑвеÑе.
Ðнимание
СлоÑÑ ÑепликаÑии ÑоÑ
ÑанÑÑÑÑÑ Ð¿Ñи ÑбоÑÑ
ÑеÑвеÑа и ниÑего не знаÑÑ Ð¾ ÑоÑÑоÑнии иÑ
поÑÑебиÑелÑ. Ðни не даÑÑ ÑдалÑÑÑ ÑÑебÑемÑе ÑеÑÑÑÑÑ, даже когда не иÑполÑзÑÑÑÑÑ Ð½Ð¸ÐºÐ°ÐºÐ¸Ð¼ подклÑÑением. Ðа ÑÑо ÑÑ
Ð¾Ð´Ð¸Ñ Ð¼ÐµÑÑо в Ñ
ÑанилиÑе, Ñак как ни ÑегменÑÑ WAL, ни ÑÑебÑемÑе ÑÑÑоки из ÑиÑÑемнÑÑ
каÑалогов нелÑÐ·Ñ Ð±ÑÐ´ÐµÑ ÑдалиÑÑ Ð² ÑезÑлÑÑаÑе VACUUM, пока они нÑÐ¶Ð½Ñ ÑÑÐ¾Ð¼Ñ ÑлоÑÑ ÑепликаÑии. РоÑобÑÑ
ÑлÑÑаÑÑ
ÑÑо Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑивеÑÑи к оÑклÑÑÐµÐ½Ð¸Ñ Ð±Ð°Ð·Ñ Ð´Ð»Ñ Ð¿ÑедоÑвÑаÑÐµÐ½Ð¸Ñ Ð·Ð°ÑÐ¸ÐºÐ»Ð¸Ð²Ð°Ð½Ð¸Ñ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑов ÑÑанзакÑий (Ñм. ÐодÑаздел 24.1.5). ÐоÑÑомÑ, еÑли ÑÐ»Ð¾Ñ Ð±Ð¾Ð»ÑÑе не ÑÑебÑеÑÑÑ, его ÑледÑÐµÑ Ð»Ð¸ÐºÐ²Ð¸Ð´Ð¸ÑоваÑÑ.
47.2.3. Ð¡Ð¸Ð½Ñ ÑонизаÑÐ¸Ñ ÑлоÑов ÑепликаÑии #
СлоÑÑ Ð»Ð¾Ð³Ð¸ÑеÑкой ÑепликаÑии на главном ÑеÑвеÑе можно ÑинÑ
ÑонизиÑоваÑÑ Ñ Ð³Ð¾ÑÑÑим ÑезеÑвом, еÑли Ð´Ð»Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑлоÑов иÑполÑзоваÑÑ ÑÑнкÑÐ¸Ñ pg_create_logical_replication_slot Ñ Ð¿Ð°ÑамеÑÑом failover или ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ CREATE SUBSCRIPTION Ñ Ð¿Ð°ÑамеÑÑом failover. ÐÑоме Ñого, на ÑезеÑвном ÑеÑвеÑе необÑ
одимо вклÑÑиÑÑ Ð¿Ð°ÑамеÑÑ sync_replication_slots. ÐÑли паÑамеÑÑ sync_replication_slots на ÑезеÑвном ÑеÑвеÑе вклÑÑÑн, ÑлоÑÑ Ð°Ð²Ð°Ñийного пеÑеклÑÑÐµÐ½Ð¸Ñ Ð±ÑдÑÑ Ð¿ÐµÑиодиÑеÑки ÑинÑ
ÑонизиÑоваÑÑÑÑ ÑабоÑим пÑоÑеÑÑом slotsync. ЧÑÐ¾Ð±Ñ ÑинÑ
ÑонизаÑÐ¸Ñ Ð¿ÑоÑ
одила коÑÑекÑно, Ð¼ÐµÐ¶Ð´Ñ Ð³Ð»Ð°Ð²Ð½Ñм и ÑезеÑвнÑм ÑеÑвеÑом необÑ
одим ÑÐ»Ð¾Ñ ÑизиÑеÑкой ÑепликаÑии (Ð´Ð»Ñ ÑезеÑвного ÑеÑвеÑа должен бÑÑÑ Ð·Ð°Ð´Ð°Ð½ паÑамеÑÑ primary_slot_name), а Ñакже на ÑезеÑвном ÑеÑвеÑе необÑ
одимо вклÑÑиÑÑ Ð¿Ð°ÑамеÑÑ hot_standby_feedback. Также необÑ
одимо ÑказаÑÑ Ð´ÐµÐ¹ÑÑвиÑелÑное знаÑение dbname в паÑамеÑÑе primary_conninfo. ÐаÑÑоÑÑелÑно ÑекомендÑеÑÑÑ Ð²Ð½ÐµÑÑи ÑÐ»Ð¾Ñ ÑизиÑеÑкой ÑепликаÑии в ÑпиÑок synchronized_standby_slots на главном ÑеÑвеÑе, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð´Ð¿Ð¸ÑÑики не полÑÑали Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑанÑÑе гоÑÑÑего ÑезеÑва. Ðаже Ñ Ð¿ÑавилÑной наÑÑÑойкой бÑÐ´ÐµÑ Ð·Ð°Ð¼ÐµÑна некоÑоÑÐ°Ñ Ð·Ð°Ð´ÐµÑжка пÑи оÑпÑавке изменений подпиÑÑикам логиÑеÑкой ÑепликаÑии из-за Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ ÑлоÑов, пеÑеÑиÑленнÑÑ
в ÑпиÑке synchronized_standby_slots. ÐÑи иÑполÑзовании ÑпиÑка synchronized_standby_slots главнÑй ÑеÑÐ²ÐµÑ Ð½Ðµ оÑклÑÑиÑÑÑ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ, пока ÑезеÑвнÑе ÑеÑвеÑÑ, ÑвÑзаннÑе Ñ Ð¿ÐµÑеÑиÑленнÑми в ÑÑом ÑпиÑке ÑлоÑами, не подÑвеÑдÑÑ Ð¿Ð¾Ð»ÑÑение поÑледниÑ
обновлений WAL.
ÐÑимеÑание
ХоÑÑ sync_replication_slots вклÑÑÐ°ÐµÑ Ð°Ð²ÑомаÑиÑеÑкÑÑ Ð¿ÐµÑиодиÑеÑкÑÑ ÑинÑ
ÑонизаÑÐ¸Ñ ÑлоÑов аваÑийного пеÑеклÑÑениÑ, иÑ
Ñакже можно ÑинÑ
ÑонизиÑоваÑÑ Ð²ÑÑÑнÑÑ Ð½Ð° ÑезеÑвном ÑеÑвеÑе Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÑÑнкÑии pg_sync_replication_slots. Ðднако Ð´Ð°Ð½Ð½Ð°Ñ ÑÑнкÑионалÑноÑÑÑ Ð² пеÑвÑÑ Ð¾ÑеÑÐµÐ´Ñ ÑазÑабоÑана в ÑелÑÑ
ÑеÑÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸ оÑладки, а поÑÐ¾Ð¼Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° пÑименÑÑÑÑÑ Ñ Ð¾ÑÑоÑожноÑÑÑÑ. РоÑлиÑие Ð¾Ñ Ð°Ð²ÑомаÑиÑеÑкой ÑинÑ
ÑонизаÑии, она не вклÑÑÐ°ÐµÑ Ð² ÑÐµÐ±Ñ ÑиклиÑеÑкие повÑоÑнÑе попÑÑки, ÑÑо Ñ Ð±Ð¾Ð»ÑÑей веÑоÑÑноÑÑÑÑ Ð¿ÑиведÑÑ Ðº оÑибкам, в оÑобенноÑÑи во вÑÐµÐ¼Ñ Ð½Ð°ÑалÑной ÑинÑ
ÑонизаÑии, пÑи коÑоÑой необÑ
одимÑе ÑÐ°Ð¹Ð»Ñ WAL или ÑÑÑоки каÑалога Ð´Ð»Ñ ÑлоÑа Ñже могли бÑÑÑ Ð¿ÐµÑемеÑÐµÐ½Ñ Ð¸Ð»Ð¸ вÑкоÑе бÑдÑÑ Ð¿ÐµÑемеÑÐµÐ½Ñ Ñ ÑезеÑвного ÑеÑвеÑа. Ð, напÑоÑив, авÑомаÑиÑеÑÐºÐ°Ñ ÑинÑ
ÑонизаÑÐ¸Ñ ÑеÑез sync_replication_slots позволÑÐµÑ Ð¿Ð¾ÑÑоÑнно обновлÑÑÑ ÑлоÑÑ, ÑÑо обеÑпеÑÐ¸Ð²Ð°ÐµÑ Ð±ÐµÑÑовное пеÑеклÑÑение и оÑказоÑÑÑойÑивоÑÑÑ, а поÑÐ¾Ð¼Ñ ÑвлÑеÑÑÑ Ð¿ÑедпоÑÑиÑелÑнÑм ÑпоÑобом ÑинÑ
ÑонизаÑии ÑлоÑов.
ÐÑи Ñекомендованной конÑигÑÑаÑии ÑинÑ
ÑонизаÑии ÑлоÑов, когда пеÑвонаÑалÑÐ½Ð°Ñ ÑинÑ
ÑонизаÑÐ¸Ñ Ð²ÑполнÑеÑÑÑ Ð°Ð²ÑомаÑиÑеÑки или вÑÑÑнÑÑ ÑеÑез pg_sync_replication_slot, на ÑезеÑвном ÑеÑвеÑе ÑинÑ
ÑонизиÑованнÑй ÑÐ»Ð¾Ñ Ð±ÑÐ´ÐµÑ Ð¿Ð¾Ð´Ð´ÐµÑживаÑÑÑÑ ÑолÑко пÑи ÑледÑÑÑиÑ
ÑÑловиÑÑ
: ÑÐ»Ð¾Ñ Ð»Ð¾Ð³Ð¸ÑеÑкой ÑепликаÑии на ведÑÑем ÑеÑвеÑе должен ÑоÑ
ÑанÑÑÑ WAL и ÑÑÑоки ÑиÑÑемного каÑалога, коÑоÑÑе вÑÑ ÐµÑÑ Ð´Ð¾ÑÑÑÐ¿Ð½Ñ Ð½Ð° ÑезеÑвном. ÐÑо обеÑпеÑÐ¸Ñ ÑелоÑÑноÑÑÑ Ð´Ð°Ð½Ð½ÑÑ
и беÑпеÑебойнÑÑ ÑабоÑÑ Ð»Ð¾Ð³Ð¸ÑеÑкой ÑепликаÑии поÑле пеÑеклÑÑениÑ. ÐÑли Ñ ÑезеÑвного ÑеÑвеÑа Ñже бÑли ÑÐ´Ð°Ð»ÐµÐ½Ñ Ð½ÐµÐ¾Ð±Ñ
одимÑе WAL или ÑÑÑоки ÑиÑÑемного каÑалога, ÑÐ»Ð¾Ñ Ð½Ðµ бÑÐ´ÐµÑ Ð¿Ð¾Ð´Ð´ÐµÑживаÑÑÑÑ Ð²Ð¾ избежание поÑеÑи даннÑÑ
. Ð ÑакиÑ
ÑлÑÑаÑÑ
в жÑÑнале поÑвиÑÑÑ ÑледÑÑÑее ÑообÑение:
LOG: could not synchronize replication slot "failover_slot" (не ÑдалоÑÑ ÑÐ¸Ð½Ñ ÑонизиÑоваÑÑ ÑÐ»Ð¾Ñ ÑепликаÑии "failover_slot") DETAIL: Synchronization could lead to data loss, because the remote slot needs WAL at LSN 0/3003F28 and catalog xmin 754, but the standby has LSN 0/3003F28 and catalog xmin 756 (Ð¡Ð¸Ð½Ñ ÑонизаÑÐ¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑивеÑÑи к поÑеÑе даннÑÑ , поÑколÑÐºÑ ÑдалÑннÑй ÑÐ»Ð¾Ñ Ð·Ð°Ð¿ÑаÑÐ¸Ð²Ð°ÐµÑ Ð·Ð°Ð¿Ð¸ÑÑ WAL Ð¾Ñ LSN 0/3003F28 и каÑалог xmin 754, но Ñ ÑезеÑвного ÑеÑвеÑа Ñже еÑÑÑ Ð·Ð°Ð¿Ð¸ÑÑ WAL Ð¾Ñ LSN 0/3003F28 и каÑалог xmin 754).
ÐÑли ÑÐ»Ð¾Ñ Ð»Ð¾Ð³Ð¸ÑеÑкой ÑепликаÑии акÑивно иÑполÑзÑеÑÑÑ Ð¿Ð¾ÑÑебиÑелем, ÑÑÑное вмеÑаÑелÑÑÑво не ÑÑебÑеÑÑÑ, поÑколÑÐºÑ ÑÐ»Ð¾Ñ Ð°Ð²ÑомаÑиÑеÑки пÑодвинеÑÑÑ Ð´Ð°Ð»ÑÑе, а ÑинÑ
ÑонизаÑÐ¸Ñ Ð²Ð¾Ð·Ð¾Ð±Ð½Ð¾Ð²Ð¸ÑÑÑ Ð² Ñ
оде ÑледÑÑÑего Ñикла. Ðднако пÑи оÑÑÑÑÑÑвии наÑÑÑоенного поÑÑебиÑÐµÐ»Ñ ÑекомендÑеÑÑÑ Ð²ÑÑÑнÑÑ Ð¿ÑодвинÑÑÑ ÑÐ»Ð¾Ñ Ð½Ð° ведÑÑий ÑеÑÐ²ÐµÑ ÑеÑез pg_logical_slot_get_changes или pg_logical_slot_get_binary_changes, ÑÑо пÑÐ¾Ð´Ð¾Ð»Ð¶Ð¸Ñ ÑинÑ
ÑонизаÑиÑ.
ÐозможноÑÑÑ Ð²Ð¾Ð·Ð¾Ð±Ð½Ð¾Ð²Ð¸ÑÑ Ð¿ÑоÑеÑÑ Ð»Ð¾Ð³Ð¸ÑеÑкой ÑепликаÑии поÑле оÑказа завиÑÐ¸Ñ Ð¾Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ pg_replication_slots.synced Ð´Ð»Ñ ÑлоÑов, ÑинÑ
ÑонизиÑованнÑÑ
на ÑезеÑвном ÑеÑвеÑе на Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð¾ÑÑабоÑки оÑказа. ÐÐ»Ñ Ð»Ð¾Ð³Ð¸ÑеÑкой ÑепликаÑии поÑле оÑказа могÑÑ Ð¸ÑполÑзоваÑÑÑÑ ÑолÑко поÑÑоÑннÑе ÑлоÑÑ, коÑоÑÑе бÑли ÑинÑ
ÑонизиÑÐ¾Ð²Ð°Ð½Ñ Ð½Ð° ÑезеÑвном ÑеÑвеÑе до оÑказа. ÐÑеменнÑе ÑинÑ
ÑонизиÑованнÑе ÑлоÑÑ Ð´Ð»Ñ ÑÑого иÑполÑзоваÑÑ Ð½ÐµÐ»ÑзÑ, Ñо еÑÑÑ Ð²Ð¾Ð·Ð¾Ð±Ð½Ð¾Ð²Ð¸ÑÑ Ð»Ð¾Ð³Ð¸ÑеÑкÑÑ ÑепликаÑÐ¸Ñ Ð´Ð»Ñ ÑакиÑ
ÑлоÑов невозможно. ÐапÑимеÑ, еÑли ÑинÑ
ÑонизиÑованнÑй ÑÐ»Ð¾Ñ Ð½Ðµ Ð¼Ð¾Ð¶ÐµÑ ÑÑаÑÑ Ð¿Ð¾ÑÑоÑннÑм на ÑезеÑвном из-за Ñого, ÑÑо подпиÑка оÑклÑÑена, Ñо подпиÑка не бÑÐ´ÐµÑ Ð²Ð¾Ð·Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð° поÑле оÑказа, даже еÑли ÐµÑ Ð²ÐºÐ»ÑÑиÑÑ.
ЧÑÐ¾Ð±Ñ Ð²Ð¾Ð·Ð¾Ð±Ð½Ð¾Ð²Ð¸ÑÑ Ð»Ð¾Ð³Ð¸ÑеÑкÑÑ ÑепликаÑÐ¸Ñ Ð¸Ð· ÑинÑ
ÑонизиÑованнÑÑ
логиÑеÑкиÑ
ÑлоÑов поÑле оÑÑабоÑки оÑказа, необÑ
одимо в ÑÑÑоке conninfo подпиÑки ÑказаÑÑ Ð³Ð»Ð°Ð²Ð½Ñй ÑеÑвеÑ. ÐÑо можно ÑделаÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ ALTER SUBSCRIPTION ... CONNECTION. РекомендÑеÑÑÑ Ð¾ÑклÑÑиÑÑ Ð¿Ð¾Ð´Ð¿Ð¸Ñки до повÑÑÐµÐ½Ð¸Ñ ÑезеÑва и вклÑÑиÑÑ Ð¿Ð¾Ñле Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑÑÑоки подклÑÑениÑ.
Ðнимание
ÐÑегда еÑÑÑ Ð²ÐµÑоÑÑноÑÑÑ, ÑÑо ÑÑаÑÑй главнÑй ÑеÑÐ²ÐµÑ Ñнова вклÑÑиÑÑÑ Ð²Ð¾ вÑÐµÐ¼Ñ Ð¿Ð¾Ð²ÑÑениÑ, и еÑли подпиÑки вклÑÑенÑ, Ñо подпиÑÑики логиÑеÑкой ÑепликаÑии могÑÑ Ð¿ÑодолжиÑÑ Ð¿Ð¾Ð»ÑÑаÑÑ Ð´Ð°Ð½Ð½Ñе Ñ Ð¿ÑоÑлого главного ÑеÑвеÑа поÑле повÑÑÐµÐ½Ð¸Ñ ÑезеÑва и вплоÑÑ Ð´Ð¾ моменÑа, пока не измениÑÑÑ ÑÑÑока подклÑÑениÑ. ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð²ÑзваÑÑ ÐºÐ¾Ð½ÑликÑÑ Ð² даннÑÑ , и подпиÑÑики не ÑмогÑÑ Ð¿ÑодолжиÑÑ ÑепликаÑÐ¸Ñ Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ главного ÑеÑвеÑа.
47.2.4. ÐодÑли вÑвода #
ÐодÑли вÑвода пеÑеводÑÑ Ð´Ð°Ð½Ð½Ñе из внÑÑÑеннего пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² жÑÑнале пÑедзапиÑи в ÑоÑмаÑ, ÑÑÑÑаиваÑÑий поÑÑебиÑÐµÐ»Ñ ÑлоÑа ÑепликаÑии.
47.2.5. ÐкÑпоÑÑиÑованнÑе Ñнимки #
Ðогда новÑй ÑÐ»Ð¾Ñ ÑепликаÑии ÑоздаÑÑÑÑ ÑеÑез инÑеÑÑÐµÐ¹Ñ Ð¿Ð¾Ñоковой ÑепликаÑии, ÑкÑпоÑÑиÑÑеÑÑÑ Ñнимок (Ñм. CREATE_REPLICATION_SLOT), коÑоÑÑй бÑÐ´ÐµÑ Ð¿Ð¾ÐºÐ°Ð·ÑваÑÑ Ñовно Ñо ÑоÑÑоÑние Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
, Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿Ð¾Ñле коÑоÑого бÑдÑÑ Ð²ÐºÐ»ÑÑаÑÑÑÑ Ð² поÑок изменений. ÐÑполÑзÑÑ ÐµÐ³Ð¾, можно ÑоздаÑÑ Ð½Ð¾Ð²ÑÑ ÑепликÑ, воÑполÑзовавÑиÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð¾Ð¹ SET TRANSACTION SNAPSHOT, ÑÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ ÑоÑÑоÑние Ð±Ð°Ð·Ñ Ð² Ð¼Ð¾Ð¼ÐµÐ½Ñ ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÑлоÑа. ÐоÑле ÑÑого даннÑÑ ÑÑанзакÑÐ¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ иÑполÑзоваÑÑ Ð´Ð»Ñ Ð²ÑгÑÑзки ÑоÑÑоÑÐ½Ð¸Ñ Ð±Ð°Ð·Ñ Ð½Ð° Ð¼Ð¾Ð¼ÐµÐ½Ñ ÑкÑпоÑÑа Ñнимка, а заÑем изменÑÑÑ ÑÑо ÑоÑÑоÑние, пÑименÑÑ ÑодеÑжимое ÑлоÑа, Ñак ÑÑо никакие Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð½Ðµ бÑдÑÑ Ð¿Ð¾ÑеÑÑнÑ.
ÐÑиложениÑ, коÑоÑÑм не ÑÑебÑеÑÑÑ ÑкÑпоÑÑ Ñнимка, могÑÑ Ð¿Ð¾Ð´Ð°Ð²Ð¸ÑÑ ÐµÐ³Ð¾, воÑполÑзовавÑиÑÑ Ñказанием SNAPSHOT 'nothing'.