CREATE SUBSCRIPTION
CREATE SUBSCRIPTION â ÑоздаÑÑ Ð¿Ð¾Ð´Ð¿Ð¸ÑкÑ
СинÑакÑиÑ
CREATE SUBSCRIPTIONимÑ_подпиÑкиCONNECTION 'ÑÑÑока_подклÑÑениÑ' PUBLICATIONимÑ_пÑбликаÑии[, ...] [ WITH (паÑамеÑÑ_подпиÑки[=знаÑение] [, ... ] ) ]
ÐпиÑание
CREATE SUBSCRIPTION ÑоздаÑÑ Ð¿Ð¾Ð´Ð¿Ð¸ÑÐºÑ Ð´Ð»Ñ ÑекÑÑей Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ
. ÐÐ¼Ñ Ð¿Ð¾Ð´Ð¿Ð¸Ñки должно оÑлиÑаÑÑÑÑ Ð¾Ñ Ð¸Ð¼Ñн дÑÑгиÑ
ÑÑÑеÑÑвÑÑÑиÑ
подпиÑок в ÑекÑÑей базе.
ÐодпиÑка пÑедÑÑавлÑÐµÑ Ñобой ÑеплиÑиÑÑÑÑее подклÑÑение к пÑбликÑÑÑÐµÐ¼Ñ ÑеÑвеÑÑ. ÐоÑÑÐ¾Ð¼Ñ Ð´Ð°Ð½Ð½Ð°Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° не ÑолÑко добавлÑÐµÑ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´Ð¿Ð¸Ñки в локалÑнÑе каÑалоги, но Ñакже ÑоздаÑÑ ÑÐ»Ð¾Ñ ÑепликаÑии на ÑдалÑнном ÑеÑвеÑе.
Ð Ð¼Ð¾Ð¼ÐµÐ½Ñ ÑикÑаÑии ÑÑанзакÑии, в ÑÐ°Ð¼ÐºÐ°Ñ ÐºÐ¾ÑоÑой вÑполнÑеÑÑÑ ÑÑа команда, бÑÐ´ÐµÑ Ð·Ð°Ð¿ÑÑен ÑабоÑий пÑоÑеÑÑ Ð»Ð¾Ð³Ð¸ÑеÑкой ÑепликаÑии.
ÐополниÑелÑнÑе ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ подпиÑÐºÐ°Ñ Ð¸ логиÑеÑкой ÑепликаÑии в Ñелом можно найÑи в Разделе 29.2 и Ðлаве 29.
ÐаÑамеÑÑÑ
имÑ_подпиÑкиÐÐ¼Ñ Ð½Ð¾Ð²Ð¾Ð¹ подпиÑки.
CONNECTION 'ÑÑÑока_подклÑÑениÑ'СÑÑока подклÑÑÐµÐ½Ð¸Ñ Ðº пÑбликÑÑÑÐµÐ¼Ñ ÑеÑвеÑÑ. ÐодÑобноÑÑи опиÑÐ°Ð½Ñ Ð² ÐодÑазделе 32.1.1.
PUBLICATIONимÑ_пÑбликаÑииÐмена пÑбликаÑий на пÑбликÑÑÑем ÑеÑвеÑе, на коÑоÑÑе оÑоÑмлÑеÑÑÑ Ð¿Ð¾Ð´Ð¿Ð¸Ñка.
WITH (паÑамеÑÑ_подпиÑки[=знаÑение] [, ... ] )Ð ÑÑом пÑедложении могÑÑ Ð·Ð°Ð´Ð°Ð²Ð°ÑÑÑÑ ÑледÑÑÑие необÑзаÑелÑнÑе паÑамеÑÑÑ Ð¿Ð¾Ð´Ð¿Ð¸Ñки:
copy_data(boolean)ÐпÑеделÑеÑ, Ð´Ð¾Ð»Ð¶Ð½Ñ Ð»Ð¸ копиÑоваÑÑÑÑ ÑÑÑеÑÑвÑÑÑие даннÑе в пÑбликаÑиÑÑ , на коÑоÑÑе оÑоÑмлÑеÑÑÑ Ð¿Ð¾Ð´Ð¿Ð¸Ñка, ÑÑÐ°Ð·Ñ Ð¿Ð¾Ñле наÑала ÑепликаÑии. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ â
true.create_slot(boolean)ÐпÑеделÑеÑ, должна ли команда ÑоздаваÑÑ ÑÐ»Ð¾Ñ ÑепликаÑии на пÑбликÑÑÑем ÑеÑвеÑе. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ â
true.enabled(boolean)ÐпÑеделÑеÑ, акÑивиÑоваÑÑ Ð»Ð¸ ÑепликаÑÐ¸Ñ Ð² подпиÑке, или ÐµÑ Ð½Ñжно ÑолÑко наÑÑÑоиÑÑ, но не запÑÑкаÑÑ ÑÑазÑ. ÐнаÑение по ÑмолÑÐ°Ð½Ð¸Ñ â
true.slot_name(string)ÐÐ¼Ñ ÑлоÑа ÑепликаÑии, коÑоÑое должно иÑполÑзоваÑÑÑÑ. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð² каÑеÑÑве имени ÑлоÑа иÑполÑзÑеÑÑÑ Ð¸Ð¼Ñ Ð¿Ð¾Ð´Ð¿Ð¸Ñки.
Ðогда в каÑеÑÑве
slot_nameзадаÑÑÑÑNONE, Ñ Ð¿Ð¾Ð´Ð¿Ð¸Ñкой не бÑÐ´ÐµÑ ÑвÑзан ÑÐ»Ð¾Ñ ÑепликаÑии. ÐÑо Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾, еÑли ÑÐ»Ð¾Ñ ÑепликаÑии позднее бÑÐ´ÐµÑ ÑоздаваÑÑÑÑ Ð²ÑÑÑнÑÑ. У ÑÐ°ÐºÐ¸Ñ Ð¿Ð¾Ð´Ð¿Ð¸Ñок Ñакже Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ ÑавнÑfalseÑвойÑÑваenabledиcreate_slot.synchronous_commit(enum)ÐнаÑение ÑÑого паÑамеÑÑа пеÑеопÑеделÑÐµÑ ÑвойÑÑво synchronous_commit. Ðо ÑмолÑÐ°Ð½Ð¸Ñ â
off.ÐнаÑение
offбезопаÑно Ð´Ð»Ñ Ð»Ð¾Ð³Ð¸ÑеÑкой ÑепликаÑии: еÑли подпиÑÑик поÑеÑÑÐµÑ ÑÑанзакÑии из-за наÑÑÑÐµÐ½Ð¸Ñ ÑÐ¸Ð½Ñ ÑонизаÑии, даннÑе бÑдÑÑ Ð¿Ð¾Ð²ÑоÑно пеÑÐµÐ´Ð°Ð½Ñ Ñ Ð¿ÑбликÑÑÑего ÑеÑвеÑа.ÐÑи вÑполнении ÑÐ¸Ð½Ñ Ñонной логиÑеÑкой ÑепликаÑии Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑмеÑÑно дÑÑгое знаÑение. РабоÑие пÑоÑеÑÑÑ Ð»Ð¾Ð³Ð¸ÑеÑкой ÑепликаÑии пеÑедаÑÑ Ð¿Ð¾Ð·Ð¸Ñии запиÑаннÑÑ Ð¸ ÑÐ¾Ñ ÑанÑннÑÑ Ð½Ð° диÑке даннÑÑ Ð¿ÑбликÑÑÑÐµÐ¼Ñ ÑеÑвеÑÑ, Ñак ÑÑо пÑи ÑÐ¸Ð½Ñ Ñонной ÑепликаÑии он бÑÐ´ÐµÑ Ð¶Ð´Ð°ÑÑ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð¸Ñ ÑÐ¾Ñ ÑанениÑ. ÐÑо знаÑиÑ, ÑÑо знаÑение
offпаÑамеÑÑаsynchronous_commitна подпиÑÑике Ð¼Ð¾Ð¶ÐµÑ ÑвелиÑиÑÑ Ð·Ð°Ð´ÐµÑÐ¶ÐºÑ Ð¿Ñи вÑполненииCOMMITна ÑеÑвеÑе пÑбликаÑии. ÐÑи Ñаком ÑÑенаÑии Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð²Ñгоднее задаÑÑ Ð´Ð»Ñsynchronous_commitзнаÑениеlocalили вÑÑе.connect(boolean)ÐпÑеделÑеÑ, нÑжно ли пÑи вÑполнении
CREATE SUBSCRIPTIONподклÑÑаÑÑÑÑ Ðº пÑбликÑÑÑÐµÐ¼Ñ ÑеÑвеÑÑ. ÐÑли ÑавнÑеÑÑÑfalse, знаÑениÑми по ÑмолÑÐ°Ð½Ð¸Ñ Ð¿Ð°ÑамеÑÑовenabled,create_slotиcopy_dataÑоже бÑдеÑfalse.ÐнаÑение
falseпаÑамеÑÑаconnectнеÑовмеÑÑимо Ñо знаÑениемtrueпаÑамеÑÑовenabled,create_slotиcopy_data.Так как Ñо знаÑением
falseÑоединение не ÑÑÑанавливаеÑÑÑ, подпиÑка на ÑаблиÑÑ Ð½Ðµ оÑоÑмлÑеÑÑÑ, Ñак ÑÑо поÑле вклÑÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´Ð¿Ð¸Ñки ниÑего не бÑÐ´ÐµÑ ÑеплиÑиÑоваÑÑÑÑ. ЧÑÐ¾Ð±Ñ ÑаблиÑÑ Ð²Ð¾Ñли в подпиÑкÑ, поÑÑебÑеÑÑÑ Ð¿Ð¾Ð·Ð¶Ðµ вÑполниÑÑALTER SUBSCRIPTION ... REFRESH PUBLICATION.
ÐамеÑаниÑ
ÐодÑобнее о Ñом, как оÑганизоваÑÑ ÑпÑавление доÑÑÑпом подпиÑÑиков к пÑбликÑÑÑÐµÐ¼Ñ ÑеÑвеÑÑ, ÑаÑÑказÑваеÑÑÑ Ð² Разделе 29.7.
ÐÑи Ñоздании ÑлоÑа ÑепликаÑии (поведение по ÑмолÑаниÑ) CREATE SUBSCRIPTION нелÑÐ·Ñ Ð²ÑполнÑÑÑ Ð²Ð½ÑÑÑи блока ÑÑанзакÑии.
Создание подпиÑки Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑением к ÑÐ¾Ð¼Ñ Ð¶Ðµ клаÑÑеÑÑ Ð±Ð°Ð· даннÑÑ
(напÑимеÑ, Ð´Ð»Ñ Ð¾ÑганизаÑии ÑепликаÑии Ð¼ÐµÐ¶Ð´Ñ Ð±Ð°Ð·Ð°Ð¼Ð¸ даннÑÑ
в одном клаÑÑеÑе или в одной базе даннÑÑ
) бÑÐ´ÐµÑ ÑÑпеÑнÑм, ÑолÑко еÑли ÑÐ»Ð¾Ñ ÑепликаÑии не ÑоздаÑÑÑÑ Ñой же командой. РпÑоÑивном ÑлÑÑае команда CREATE SUBSCRIPTION завиÑнеÑ. ЧÑÐ¾Ð±Ñ Ð¾ÑоÑмиÑÑ ÑакÑÑ Ð¿Ð¾Ð´Ð¿Ð¸ÑкÑ, ÑÐ»Ð¾Ñ ÑепликаÑии нÑжно ÑоздаÑÑ Ð¾ÑделÑно (воÑполÑзовавÑиÑÑ ÑÑнкÑией pg_create_logical_replication_slot и пеÑедав ей Ð¸Ð¼Ñ Ð¼Ð¾Ð´ÑÐ»Ñ pgoutput) и ÑоздаÑÑ Ð¿Ð¾Ð´Ð¿Ð¸ÑÐºÑ Ñ Ð¿Ð°ÑамеÑÑом create_slot = false. ÐÑо огÑаниÑение ÑеализаÑии, коÑоÑое Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑÑÑÑанено в бÑдÑÑем вÑпÑÑке.
ÐÑимеÑÑ
Создание подпиÑки на ÑепликаÑии mypublication и insert_only на ÑдалÑнном ÑеÑвеÑе Ñ Ð½ÐµÐ¼ÐµÐ´Ð»ÐµÐ½Ð½Ñм запÑÑком ÑепликаÑии пÑи ÑикÑиÑовании ÑÑанзакÑии:
CREATE SUBSCRIPTION mysub
CONNECTION 'host=192.168.1.50 port=5432 user=foo dbname=foodb'
PUBLICATION mypublication, insert_only;Создание подпиÑки на пÑбликаÑÐ¸Ñ insert_only на ÑдалÑнном ÑеÑвеÑе Ñ Ð¾ÑклÑÑением ÑепликаÑии Ð´Ð»Ñ Ð·Ð°Ð¿ÑÑка в бÑдÑÑем.
CREATE SUBSCRIPTION mysub
CONNECTION 'host=192.168.1.50 port=5432 user=foo dbname=foodb'
PUBLICATION insert_only
WITH (enabled = false);СовмеÑÑимоÑÑÑ
CREATE SUBSCRIPTION ÑвлÑеÑÑÑ ÑаÑÑиÑением Postgres Pro.