28.9. ÐÑÑ Ð¸ÑекÑÑÑа #
ÐогиÑеÑÐºÐ°Ñ ÑепликаÑÐ¸Ñ Ð¿Ð¾ÑÑÑоена по ÑÑ
еме, подобной ÑизиÑеÑкой поÑоковой ÑепликаÑии (Ñм. ÐодÑаздел 25.2.5). Ðна ÑеализÑеÑÑÑ Ð¿ÑоÑеÑÑами walsender (пеÑедаÑи WAL) и apply (пÑименениÑ). ÐÑоÑеÑÑ walsender запÑÑÐºÐ°ÐµÑ Ð»Ð¾Ð³Ð¸ÑеÑкое декодиÑование (опиÑанное в Ðлаве 47) WAL и загÑÑÐ¶Ð°ÐµÑ ÑÑандаÑÑнÑй модÑÐ»Ñ Ð²Ñвода логиÑеÑкого декодиÑÐ¾Ð²Ð°Ð½Ð¸Ñ (pgoutput). ÐÑÐ¾Ñ Ð¼Ð¾Ð´ÑÐ»Ñ Ð¿ÑеобÑазÑÐµÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ, ÑÑиÑÑваемÑе из WAL, в пÑоÑокол логиÑеÑкой ÑепликаÑии (Ñм. Раздел 54.5) и оÑÑилÑÑÑовÑÐ²Ð°ÐµÑ Ð´Ð°Ð½Ð½Ñе ÑоглаÑно ÑпеÑиÑикаÑии пÑбликаÑии. ÐаÑем даннÑе поÑледоваÑелÑно пеÑедаÑÑÑÑ Ð¿Ð¾ пÑоÑÐ¾ÐºÐ¾Ð»Ñ Ð»Ð¾Ð³Ð¸ÑеÑкой ÑепликаÑии ÑабоÑÐµÐ¼Ñ Ð¿ÑоÑеÑÑÑ Ð¿ÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹, коÑоÑÑй ÑопоÑÑавлÑÐµÑ Ð´Ð°Ð½Ð½Ñе Ñ Ð»Ð¾Ð³Ð¸ÑеÑкими ÑаблиÑами и пÑименÑÐµÑ Ð¾ÑделÑнÑе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿Ð¾ меÑе иÑ
поÑÑÑплениÑ, ÑоÑ
ÑанÑÑ ÑÑанзакÑионнÑй поÑÑдок.
ÐÑоÑеÑÑ Ð¿ÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ в базе даннÑÑ
подпиÑÑика вÑегда вÑполнÑеÑÑÑ Ñо знаÑением session_replication_role ÑавнÑм replica. ÐÑо ознаÑаеÑ, ÑÑо по ÑмолÑÐ°Ð½Ð¸Ñ ÑÑиггеÑÑ Ð¸ пÑавила не бÑдÑÑ ÑÑабаÑÑваÑÑ Ð½Ð° подпиÑÑике. ÐÑи желании полÑзоваÑели могÑÑ Ð²ÐºÐ»ÑÑиÑÑ ÑÑиггеÑÑ Ð¸ пÑавила Ð´Ð»Ñ ÑаблиÑÑ, иÑполÑзÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ ALTER TABLE Ñ Ð¿ÑедложениÑми ENABLE TRIGGER и ENABLE RULE.
ÐÑоÑеÑÑ Ð¿ÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð»Ð¾Ð³Ð¸ÑеÑкой ÑепликаÑии в наÑÑоÑÑее вÑÐµÐ¼Ñ Ð²ÑзÑÐ²Ð°ÐµÑ ÑолÑко ÑÑиггеÑÑ ÑÑÐ¾Ð²Ð½Ñ ÑÑÑок, но не ÑÑиггеÑÑ Ð¾Ð¿ÐµÑаÑоÑов. Ðднако наÑалÑÐ½Ð°Ñ ÑинÑ
ÑонизаÑÐ¸Ñ ÑаблиÑÑ Ñеализована как команда COPY и поÑÑÐ¾Ð¼Ñ Ð²ÑзÑÐ²Ð°ÐµÑ ÑÑиггеÑÑ Ð´Ð»Ñ INSERT и ÑÑÐ¾Ð²Ð½Ñ ÑÑÑок, и ÑÑÐ¾Ð²Ð½Ñ Ð¾Ð¿ÐµÑаÑоÑа.
28.9.1. ÐаÑалÑнÑй Ñнимок #
ÐаÑалÑнÑе даннÑе ÑÑÑеÑÑвÑÑÑÐ¸Ñ ÑÐ°Ð±Ð»Ð¸Ñ Ð² подпиÑке помеÑаÑÑÑÑ Ð² Ñнимок и копиÑÑÑÑÑÑ Ð² паÑаллелÑном ÑкземплÑÑе пÑоÑеÑÑа пÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¾Ñобого вида. Ðн ÑвлÑеÑÑÑ Ð²ÑделеннÑм ÑабоÑим пÑоÑеÑÑом ÑÐ¸Ð½Ñ ÑонизаÑии ÑаблиÑ, коÑоÑÑй поÑождаеÑÑÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ ÑаблиÑÑ, подлежаÑей ÑÐ¸Ð½Ñ ÑонизаÑии. ÐÐ°Ð¶Ð´Ð°Ñ ÑÐ¸Ð½Ñ ÑонизаÑÐ¸Ñ ÑÐ°Ð±Ð»Ð¸Ñ ÑоздаÑÑ ÑобÑÑвеннÑй ÑÐ»Ð¾Ñ ÑепликаÑии и пÑÐ¾Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ ÐºÐ¾Ð¿Ð¸Ñование ÑÑÑеÑÑвÑÑÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ . Ðак ÑолÑко копиÑование бÑÐ´ÐµÑ Ð·Ð°ÐºÐ¾Ð½Ñено, ÑодеÑжимое ÑаблиÑÑ ÑÑÐ°Ð½ÐµÑ Ð²Ð¸Ð´Ð¸Ð¼Ñм Ð´Ð»Ñ Ð´ÑÑÐ³Ð¸Ñ ÑеÑвеÑнÑÑ Ð¿ÑоÑеÑÑов. Ðогда ÑÑÑеÑÑвÑÑÑие даннÑе бÑдÑÑ ÑкопиÑованÑ, ÑÑÐ¾Ñ ÑабоÑий пÑоÑеÑÑ Ð¿ÐµÑÐµÑ Ð¾Ð´Ð¸Ñ Ð² Ñежим ÑÐ¸Ð½Ñ ÑонизаÑии, в коÑоÑом ÑаблиÑа пÑиводиÑÑÑ Ð² ÑÐ¸Ð½Ñ ÑонизиÑованное ÑоÑÑоÑние Ð´Ð»Ñ Ð¾Ñновного пÑоÑеÑÑа пÑименениÑ, Ñо еÑÑÑ Ð¿ÐµÑедаÑÑ Ð²Ñе изменениÑ, пÑоизоÑедÑие во вÑÐµÐ¼Ñ Ð½Ð°ÑалÑного копиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ , иÑполÑзÑÑ ÑÑандаÑÑнÑÑ Ð»Ð¾Ð³Ð¸ÑеÑкÑÑ ÑепликаÑиÑ. Ðа ÑÑом ÑÑапе ÑÐ¸Ð½Ñ ÑонизаÑии Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿ÑименÑÑÑÑÑ Ð¸ ÑикÑиÑÑÑÑÑÑ Ð² Ñом же поÑÑдке, ÑÑо и на ÑÑоÑоне пÑбликаÑии. Ðо завеÑÑении ÑÐ¸Ð½Ñ ÑонизаÑии ÑпÑавление ÑепликаÑией ÑÑой ÑаблиÑÑ Ð²Ð¾Ð·Ð²ÑаÑаеÑÑÑ Ð³Ð»Ð°Ð²Ð½Ð¾Ð¼Ñ Ð¿ÑоÑеÑÑÑ, коÑоÑÑй пÑÐ¾Ð´Ð¾Ð»Ð¶Ð°ÐµÑ ÑепликаÑÐ¸Ñ Ð² обÑÑном Ñежиме.
ÐÑимеÑание
ÐаÑамеÑÑ Ð¿ÑбликаÑии publish влиÑÐµÑ ÑолÑко на Ñо, какие DML-опеÑаÑии бÑдÑÑ ÑеплиÑиÑоваÑÑÑÑ. Ðн не влиÑÐµÑ Ð½Ð° копиÑование ÑÑÑеÑÑвÑÑÑиÑ
даннÑÑ
ÑÐ°Ð±Ð»Ð¸Ñ Ð¿Ñи наÑалÑной ÑинÑ
ÑонизаÑии даннÑÑ
.
ÐÑимеÑание
ÐÑли во вÑÐµÐ¼Ñ ÐºÐ¾Ð¿Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑабоÑий пÑоÑеÑÑ ÑинÑ
ÑонизаÑии ÑаблиÑÑ Ð·Ð°Ð²ÐµÑÑаеÑÑÑ Ñ Ð¾Ñибкой, ÑабоÑий пÑоÑеÑÑ Ð¿ÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¾Ð±Ð½Ð°ÑÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð¾ÑÐ¸Ð±ÐºÑ Ð¸ пеÑеÑоздаÑÑ ÑÑÐ¾Ñ Ð¿ÑоÑеÑÑ, ÑÑÐ¾Ð±Ñ Ð¿ÑоÑеÑÑ ÑинÑ
ÑонизаÑии пÑодолжилÑÑ. Такое поведение обеÑпеÑÐ¸Ð²Ð°ÐµÑ Ð½ÐµÐ¿ÑеÑÑвнÑÑ ÑабоÑÑ ÑепликаÑии в ÑлÑÑае вÑеменнÑÑ
оÑибок. См. Ñакже wal_retrieve_retry_interval.