CREATE PUBLICATION
CREATE PUBLICATION â ÑоздаÑÑ Ð¿ÑбликаÑиÑ
СинÑакÑиÑ
CREATE PUBLICATIONимÑ[ FOR TABLE [ ONLY ]имÑ_ÑаблиÑÑ[ * ] [, ...] | FOR ALL TABLES ] [ WITH (паÑамеÑÑ_пÑбликаÑии[=знаÑение] [, ... ] ) ]
ÐпиÑание
CREATE PUBLICATION ÑоздаÑÑ Ð½Ð¾Ð²ÑÑ Ð¿ÑбликаÑÐ¸Ñ Ð² ÑекÑÑей базе даннÑÑ
. ÐÐ¼Ñ Ð¿ÑбликаÑии должно оÑлиÑаÑÑÑÑ Ð¾Ñ Ð¸Ð¼Ñн дÑÑгиÑ
ÑÑÑеÑÑвÑÑÑиÑ
пÑбликаÑий в ÑекÑÑей базе.
ÐÑбликаÑÐ¸Ñ Ð¿Ð¾ ÑÑÑи ÑвлÑеÑÑÑ Ð³ÑÑппой ÑаблиÑ, Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² даннÑÑ ÐºÐ¾ÑоÑÑÑ Ð´Ð¾Ð»Ð¶Ð½Ñ ÑеплиÑиÑоваÑÑÑÑ Ñ Ð¸ÑполÑзованием логиÑеÑкой ÑепликаÑии. ÐодÑобнее о Ñом, как пÑбликаÑии впиÑÑваÑÑÑÑ Ð² ÑÑ ÐµÐ¼Ñ Ð»Ð¾Ð³Ð¸ÑеÑкой ÑепликаÑии, ÑаÑÑказÑваеÑÑÑ Ð² Разделе 29.1.
ÐаÑамеÑÑÑ
имÑÐÐ¼Ñ Ð½Ð¾Ð²Ð¾Ð¹ пÑбликаÑии.
FOR TABLEÐадаÑÑ ÑпиÑок ÑаблиÑ, добавлÑемÑÑ Ð² пÑбликаÑиÑ. ÐÑли пеÑед именем ÑаблиÑÑ Ñказано
ONLY, в пÑбликаÑÐ¸Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÑеÑÑÑ ÑолÑко Ð·Ð°Ð´Ð°Ð½Ð½Ð°Ñ ÑаблиÑа. ÐезONLYдобавлÑеÑÑÑ Ð¸ Ð·Ð°Ð´Ð°Ð½Ð½Ð°Ñ ÑаблиÑа, и вÑе ÐµÑ Ð¿Ð¾Ñомки (еÑли ÑаковÑе еÑÑÑ). ÐоÑле имени ÑаблиÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ добавиÑÑ Ð½ÐµÐ¾Ð±ÑзаÑелÑное Ñказание*, ÑÑÐ¾Ð±Ñ Ñвно обознаÑиÑÑ, ÑÑо Ð´Ð¾Ð»Ð¶Ð½Ñ Ð²ÐºÐ»ÑÑаÑÑÑÑ Ð¸ вÑе доÑеÑние ÑаблиÑÑ.РпÑбликаÑÐ¸Ñ Ð¼Ð¾Ð³ÑÑ Ð²ÐºÐ»ÑÑаÑÑÑÑ ÑолÑко поÑÑоÑннÑе базовÑе ÑаблиÑÑ. ÐÑеменнÑе, нежÑÑналиÑÑемÑе, ÑÑоÑонние и ÑекÑиониÑованнÑе ÑаблиÑÑ, а Ñакже маÑеÑиализованнÑе и обÑÑнÑе пÑедÑÑÐ°Ð²Ð»ÐµÐ½Ð¸Ñ Ð½Ðµ могÑÑ Ð²Ñ Ð¾Ð´Ð¸ÑÑ Ð² пÑбликаÑиÑ. ÐÐ»Ñ ÑеплиÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑекÑиониÑованной ÑаблиÑÑ Ð² пÑбликаÑÐ¸Ñ Ð½Ñжно добавиÑÑ ÐµÑ Ð¾ÑделÑнÑе ÑекÑии.
FOR ALL TABLESУÑÑанавливаеÑ, ÑÑо Ð´Ð°Ð½Ð½Ð°Ñ Ð¿ÑбликаÑÐ¸Ñ Ð¾Ñ Ð²Ð°ÑÑÐ²Ð°ÐµÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²Ð¾ вÑÐµÑ ÑаблиÑÐ°Ñ Ð² базе даннÑÑ , вклÑÑÐ°Ñ ÑаблиÑÑ, коÑоÑÑе бÑдÑÑ ÑÐ¾Ð·Ð´Ð°Ð½Ñ Ð¿Ð¾Ð·Ð¶Ðµ.
WITH (паÑамеÑÑ_пÑбликаÑии[=знаÑение] [, ... ] )Ð ÑÑом пÑедложении могÑÑ Ð·Ð°Ð´Ð°Ð²Ð°ÑÑÑÑ ÑледÑÑÑие необÑзаÑелÑнÑе паÑамеÑÑÑ Ð¿ÑбликаÑии:
publish(string)ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¾Ð¿ÑеделÑеÑ, какие опеÑаÑии DML бÑÐ´ÐµÑ Ð¿ÐµÑедаваÑÑ Ð½Ð¾Ð²Ð°Ñ Ð¿ÑбликаÑÐ¸Ñ ÐµÑ Ð¿Ð¾Ð´Ð¿Ð¸ÑÑикам. РкаÑеÑÑве его знаÑÐµÐ½Ð¸Ñ ÑеÑез запÑÑÑÑ Ð·Ð°Ð´Ð°ÑÑÑÑ ÑпиÑок опеÑаÑий из ÑледÑÑÑÐ¸Ñ :
insert,update,deleteиtruncate. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¿ÑбликÑÑÑÑÑ Ð²Ñе дейÑÑвиÑ, Ñак ÑÑо ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение по ÑмолÑаниÑ'insert, update, delete, truncate'.
ÐÑимеÑаниÑ
ÐÑли не задано ни FOR TABLE, ни FOR ALL TABLES, пÑбликаÑÐ¸Ñ ÑоздаÑÑÑÑ Ñ Ð¿ÑÑÑÑм набоÑом ÑаблиÑ. ÐÑо полезно, еÑли ÑаблиÑÑ Ð±ÑдÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÑÑÑÑÑ Ð¿Ð¾Ð·Ð´Ð½ÐµÐµ.
Создание пÑбликаÑии не влеÑÑÑ Ð½ÐµÐ¼ÐµÐ´Ð»ÐµÐ½Ð½Ñй запÑÑк ÑепликаÑии. ÐÑа опеÑаÑÐ¸Ñ ÑолÑко опÑеделÑÐµÑ Ð»Ð¾Ð³Ð¸ÐºÑ Ð³ÑÑппиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸ ÑилÑÑÑаÑии Ð´Ð»Ñ Ð±ÑдÑÑÐ¸Ñ Ð¿Ð¾Ð´Ð¿Ð¸ÑÑиков.
ЧÑÐ¾Ð±Ñ ÑоздаÑÑ Ð¿ÑбликаÑиÑ, полÑзоваÑÐµÐ»Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ имеÑÑ Ð¿Ñаво CREATE в ÑекÑÑей базе даннÑÑ
. (РазÑмееÑÑÑ, на ÑÑпеÑполÑзоваÑелей ÑÑо ÑÑловие не ÑаÑпÑоÑÑÑанÑеÑÑÑ.)
ЧÑÐ¾Ð±Ñ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ ÑаблиÑÑ Ð² пÑбликаÑиÑ, полÑзоваÑÐµÐ»Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ имеÑÑ Ð¿Ñава владелÑÑа ÑÑой ÑаблиÑÑ. ÐÐ»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿ÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ FOR ALL TABLES полÑзоваÑÐµÐ»Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ бÑÑÑ ÑÑпеÑполÑзоваÑелем.
ТаблиÑÑ, добавлÑемÑе в пÑбликаÑиÑ, коÑоÑÐ°Ñ Ð¾Ñ
ваÑÑÐ²Ð°ÐµÑ Ð¾Ð¿ÐµÑаÑии UPDATE и/или DELETE, Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¸Ð¼ÐµÑÑ ÑвойÑÑво REPLICA IDENTITY. РпÑоÑивном ÑлÑÑае оÑÑлеживание ÑÑиÑ
опеÑаÑий Ð´Ð»Ñ ÑÐ°Ð±Ð»Ð¸Ñ Ð±ÑÐ´ÐµÑ Ð·Ð°Ð¿ÑеÑено.
ÐÐ»Ñ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ INSERT ... ON CONFLICT пÑбликаÑÐ¸Ñ Ð±ÑÐ´ÐµÑ Ð²ÑдаваÑÑ Ð¾Ð¿ÐµÑаÑиÑ, к коÑоÑой ÑводиÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð°. РзавиÑимоÑÑи Ð¾Ñ Ð¸ÑÑ
ода командÑ, она Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾Ð¿Ñбликована либо как INSERT, либо как UPDATE, либо не бÑÐ´ÐµÑ Ð¾Ð¿Ñбликована вовÑе.
ÐÐ¾Ð¼Ð°Ð½Ð´Ñ COPY ... FROM пÑбликÑÑÑÑÑ Ð² виде опеÑаÑий INSERT.
ÐпеÑаÑии DDL не пÑбликÑÑÑÑÑ.
ÐÑимеÑÑ
Создание пÑбликаÑии, Ð¾Ñ Ð²Ð°ÑÑваÑÑей Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð² двÑÑ ÑаблиÑÐ°Ñ :
CREATE PUBLICATION mypublication FOR TABLE users, departments;
Создание пÑбликаÑии, Ð¾Ñ Ð²Ð°ÑÑваÑÑей вÑе Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²Ð¾ вÑÐµÑ ÑаблиÑÐ°Ñ :
CREATE PUBLICATION alltables FOR ALL TABLES;
Создание пÑбликаÑии, оÑ
ваÑÑваÑÑей ÑолÑко опеÑаÑии INSERT в одной ÑаблиÑе:
CREATE PUBLICATION insert_only FOR TABLE mydata
WITH (publish = 'insert');СовмеÑÑимоÑÑÑ
CREATE PUBLICATION ÑвлÑеÑÑÑ ÑаÑÑиÑением Postgres Pro.