28.4. ФилÑÑÑÑ ÑÑÑок #
- 28.4.1. ÐÑавила ÑилÑÑÑов ÑÑÑок
- 28.4.2. ÐгÑаниÑÐµÐ½Ð¸Ñ Ð²ÑÑажений
- 28.4.3. ÐÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ UPDATE
- 28.4.4. СекÑиониÑованнÑе ÑаблиÑÑ
- 28.4.5. ÐаÑалÑÐ½Ð°Ñ ÑÐ¸Ð½Ñ ÑонизаÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ
- 28.4.6. ÐбÑединение неÑколÑÐºÐ¸Ñ ÑилÑÑÑов ÑÑÑок
- 28.4.7. ÐÑимеÑÑ
- 28.4.2. ÐгÑаниÑÐµÐ½Ð¸Ñ Ð²ÑÑажений
Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð¿Ð¾Ð´Ð¿Ð¸ÑÑикам пеÑедаÑÑÑÑ Ð²Ñе даннÑе из вÑеÑ
опÑбликованнÑÑ
ÑаблиÑ. Ðднако множеÑÑво ÑеплиÑиÑÑемÑÑ
даннÑÑ
можно огÑаниÑиÑÑ, иÑполÑзÑÑ ÑилÑÑÑ ÑÑÑок. ÐоÑÑебноÑÑÑ Ð¸ÑполÑзоваÑÑ ÑилÑÑÑÑ ÑÑÑок Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð²Ñзвана ÑообÑажениÑми безопаÑноÑÑи, пÑоизводиÑелÑноÑÑи или ÑÑебованиÑми к поведениÑ. ÐÑли Ð´Ð»Ñ Ð¾Ð¿Ñбликованной ÑаблиÑÑ ÑÑÑанавливаеÑÑÑ ÑилÑÑÑ ÑÑÑок, ÑÑÑока ÑеплиÑиÑÑеÑÑÑ, ÑолÑко еÑли ÐµÑ Ð´Ð°Ð½Ð½Ñе ÑдовлеÑвоÑÑÑÑ Ð²ÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ ÑÑого ÑилÑÑÑа. ÐÑо позволÑÐµÑ Ð¾ÑганизоваÑÑ ÑаÑÑиÑнÑÑ ÑепликаÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ
набоÑа ÑаблиÑ. ÐпÑеделÑÑÑÑÑ ÑилÑÑÑÑ ÑÑÑок на ÑÑовне оÑделÑнÑÑ
ÑаблиÑ. ÐÐ»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ пÑбликÑемой ÑаблиÑÑ, даннÑе коÑоÑой ÑÑебÑеÑÑÑ Ð¾ÑÑилÑÑÑоваÑÑ, нÑжно добавиÑÑ Ð¿Ñедложение WHERE поÑле ÐµÑ Ð¸Ð¼ÐµÐ½Ð¸, пÑи ÑÑом вÑÑажение ÑÑÐ»Ð¾Ð²Ð¸Ñ WHERE нÑжно заклÑÑиÑÑ Ð² кÑÑглÑе Ñкобки. Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº CREATE PUBLICATION.
28.4.1. ÐÑавила ÑилÑÑÑов ÑÑÑок #
ФилÑÑÑÑ ÑÑÑок пÑименÑÑÑÑÑ Ð¿ÐµÑед пÑбликаÑией изменений. ÐÑли ÑезÑлÑÑаÑом вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ ÑилÑÑÑа Ð´Ð»Ñ ÑÑÑоки ÑвлÑеÑÑÑ false или NULL, ÑÑа ÑÑÑока не ÑеплиÑиÑÑеÑÑÑ. ÐÑÑажение ÑÑÐ»Ð¾Ð²Ð¸Ñ WHERE вÑÑиÑлÑеÑÑÑ Ð¾Ñ Ð¸Ð¼ÐµÐ½Ð¸ Ñоли, коÑоÑÐ°Ñ Ð¸ÑполÑзÑеÑÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ð¸Ñ ÑепликаÑии (Ñ. е. Ñоли, Ñказанной в пÑедложении CONNECTION CREATE SUBSCRIPTION). Ðа ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ TRUNCATE ÑилÑÑÑÑ ÑÑÑок не ÑаÑпÑоÑÑÑанÑÑÑÑÑ.
28.4.2. ÐгÑаниÑÐµÐ½Ð¸Ñ Ð²ÑÑажений #
РпÑедложении WHERE допÑÑкаÑÑÑÑ ÑолÑко пÑоÑÑÑе вÑÑажениÑ, в коÑоÑÑÑ
нелÑÐ·Ñ Ð¸ÑполÑзоваÑÑ Ð¾Ð¿ÑеделÑемÑе полÑзоваÑелем ÑÑнкÑии, опеÑаÑоÑÑ, ÑÐ¸Ð¿Ñ Ð¸ паÑамеÑÑÑ ÑоÑÑиÑовки, а Ñакже ÑÑÑлки на ÑиÑÑемнÑе ÑÑолбÑÑ Ð¸ непоÑÑоÑннÑе вÑÑÑоеннÑе ÑÑнкÑии.
ÐÑли ÑеÑез пÑбликаÑÐ¸Ñ ÑеплиÑиÑÑÑÑÑÑ Ð¾Ð¿ÐµÑаÑии UPDATE или DELETE, пÑедложение WHERE ÑилÑÑÑа ÑÑÑок должно ÑодеÑжаÑÑ ÑолÑко Ñе ÑÑолбÑÑ, коÑоÑÑе вÑ
одÑÑ Ð² иденÑиÑикаÑÐ¾Ñ Ñеплики (Ñм. REPLICA IDENTITY). ÐÑли же ÑеÑез пÑбликаÑÐ¸Ñ ÑеплиÑиÑÑÑÑÑÑ ÑолÑко опеÑаÑии INSERT, в ÑилÑÑÑе ÑÑÑок WHERE можно иÑполÑзоваÑÑ Ð»Ñбой ÑÑолбеÑ.
28.4.3. ÐÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ UPDATE #
ÐÑи вÑполнении каждой опеÑаÑии UPDATE вÑÑажение ÑилÑÑÑа ÑÑÑок вÑÑиÑлÑеÑÑÑ Ð¸ Ð´Ð»Ñ ÑÑаÑой, и Ð´Ð»Ñ Ð½Ð¾Ð²Ð¾Ð¹ ÑÑÑоки (Ñ. е. пÑовеÑÑÑÑÑÑ Ð´Ð°Ð½Ð½Ñе до и поÑле изменениÑ). ÐÑли оба ÑезÑлÑÑаÑа положиÑелÑнÑе (true), изменение UPDATE ÑеплиÑиÑÑеÑÑÑ. ÐÑли оба ÑезÑлÑÑаÑа оÑÑиÑаÑелÑнÑе (false), изменение не ÑеплиÑиÑÑеÑÑÑ. ÐÑли же вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ ÑилÑÑÑа ÑдовлеÑвоÑÑÐµÑ ÑолÑко одна ÑÑÑока, ÑÑаÑÐ°Ñ Ð¸Ð»Ð¸ новаÑ, опеÑаÑÐ¸Ñ UPDATE пÑеобÑазÑеÑÑÑ Ð² INSERT или DELETE, ÑÑÐ¾Ð±Ñ Ð½Ðµ наÑÑÑилаÑÑ ÑоглаÑованноÑÑÑ Ð´Ð°Ð½Ð½ÑÑ
. СÑÑока на ÑÑоÑоне подпиÑки должна ÑооÑвеÑÑÑвоваÑÑ Ð²ÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ ÑилÑÑÑа ÑÑÑок, опÑеделÑнного на пÑбликÑÑÑем ÑеÑвеÑе.
ÐÑли ÑÑаÑÐ°Ñ ÑÑÑока ÑооÑвеÑÑÑвÑÐµÑ Ð²ÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ ÑилÑÑÑа ÑÑÑок (она бÑла пеÑедана подпиÑÑикÑ), а Ð½Ð¾Ð²Ð°Ñ ÑÑÑока â неÑ, Ñо Ð´Ð»Ñ Ð¾Ð±ÐµÑпеÑÐµÐ½Ð¸Ñ ÑоглаÑованноÑÑи даннÑÑ
ÑÑаÑÑÑ ÑÑÑÐ¾ÐºÑ Ð½Ñжно ÑдалиÑÑ Ñ Ð¿Ð¾Ð´Ð¿Ð¸ÑÑика. Таким обÑазом, UPDATE пÑеобÑазÑеÑÑÑ Ð² DELETE.
ÐÑли ÑÑаÑÐ°Ñ ÑÑÑока не ÑооÑвеÑÑÑвÑÐµÑ Ð²ÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ ÑилÑÑÑа ÑÑÑок (она не бÑла пеÑедана подпиÑÑикÑ), а Ð½Ð¾Ð²Ð°Ñ ÑÑÑока ÑооÑвеÑÑÑвÑеÑ, Ñо Ð´Ð»Ñ Ð¾Ð±ÐµÑпеÑÐµÐ½Ð¸Ñ ÑоглаÑованноÑÑи даннÑÑ
новÑÑ ÑÑÑÐ¾ÐºÑ Ð½Ñжно добавиÑÑ Ð² ÑаблиÑÑ Ð¿Ð¾Ð´Ð¿Ð¸ÑÑика. Таким обÑазом, UPDATE пÑеобÑазÑеÑÑÑ Ð² INSERT.
ÐÑоизводимÑе пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ñ Ð² ТаблиÑе 28.1.
ТаблиÑа 28.1. ÐÑаÑÐºÐ°Ñ ÑÑ
ема пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ UPDATE
| СÑаÑÐ°Ñ ÑÑÑока | ÐÐ¾Ð²Ð°Ñ ÑÑÑока | ÐÑеобÑазование |
|---|---|---|
| не ÑооÑвеÑÑÑвÑÐµÑ | не ÑооÑвеÑÑÑвÑÐµÑ | не ÑеплиÑиÑоваÑÑ |
| не ÑооÑвеÑÑÑвÑÐµÑ | ÑооÑвеÑÑÑвÑÐµÑ | INSERT |
| ÑооÑвеÑÑÑвÑÐµÑ | не ÑооÑвеÑÑÑвÑÐµÑ | DELETE |
| ÑооÑвеÑÑÑвÑÐµÑ | ÑооÑвеÑÑÑвÑÐµÑ | UPDATE |
28.4.4. СекÑиониÑованнÑе ÑаблиÑÑ #
ÐÑли пÑбликаÑÐ¸Ñ ÑодеÑÐ¶Ð¸Ñ ÑекÑиониÑованнÑÑ ÑаблиÑÑ, паÑамеÑÑ Ð¿ÑбликаÑии publish_via_partition_root опÑеделÑеÑ, какой ÑилÑÑÑ ÑÑÑок иÑполÑзоваÑÑ. ÐÑли publish_via_partition_root Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение true, иÑполÑзÑеÑÑÑ ÑилÑÑÑ ÑÑÑок коÑневой ÑекÑиониÑованной ÑаблиÑÑ. РпÑоÑивном ÑлÑÑае, еÑли publish_via_partition_root Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение false (по ÑмолÑаниÑ), иÑполÑзÑÑÑÑÑ ÑилÑÑÑÑ ÑÑÑок каждой ÑекÑии.
28.4.5. ÐаÑалÑÐ½Ð°Ñ ÑÐ¸Ð½Ñ ÑонизаÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ #
ÐÑли подпиÑка ÑÑебÑÐµÑ ÐºÐ¾Ð¿Ð¸ÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ñже ÑÑÑеÑÑвÑÑÑиÑ
даннÑÑ
, а пÑбликаÑÐ¸Ñ ÑодеÑÐ¶Ð¸Ñ Ð¿ÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ WHERE, подпиÑÑÐ¸ÐºÑ ÐºÐ¾Ð¿Ð¸ÑÑÑÑÑÑ ÑолÑко даннÑе, ÑдовлеÑвоÑÑÑÑие вÑÑажениÑм ÑилÑÑÑов ÑÑÑок.
ÐÑли подпиÑка ÑвÑзана Ñ Ð½ÐµÑколÑкими пÑбликаÑиÑми, в коÑоÑÑÑ
одна ÑаблиÑа опÑбликована Ñ ÑазнÑми пÑедложениÑми WHERE, бÑдÑÑ ÑкопиÑÐ¾Ð²Ð°Ð½Ñ ÑÑÑоки, ÑдовлеÑвоÑÑÑÑие лÑÐ±Ð¾Ð¼Ñ Ð¸Ð· ÑилÑÑÑов. Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº ÐодÑазделÑ 28.4.6.
ÐÑедÑпÑеждение
Так как пÑи наÑалÑной ÑинÑ
ÑонизаÑии даннÑÑ
не ÑÑиÑÑваеÑÑÑ Ð¿Ð°ÑамеÑÑ publish, когда копиÑÑÑÑÑÑ ÑÑÑеÑÑвÑÑÑие даннÑе ÑаблиÑ, подпиÑÑÐ¸ÐºÑ Ð¼Ð¾Ð³ÑÑ Ð±ÑÑÑ Ð¿ÐµÑÐµÐ´Ð°Ð½Ñ ÑÑÑоки, коÑоÑÑе не ÑеплиÑиÑовалиÑÑ Ð±Ñ Ð¿Ñи вÑполнении опеÑаÑий DML. ÐÑимеÑÑ Ð¿ÑÐ¸Ð²ÐµÐ´ÐµÐ½Ñ Ð² ÐодÑазделе 28.9.1 и ÐодÑазделе 28.2.2.
ÐÑимеÑание
ÐÑли на ÑÑоÑоне подпиÑÑика иÑполÑзÑеÑÑÑ Ð²ÐµÑÑÐ¸Ñ Ð½Ð¸Ð¶Ðµ 15, пÑи копиÑовании ÑÑÑеÑÑвÑÑÑÐ¸Ñ Ð´Ð°Ð½Ð½ÑÑ ÑилÑÑÑÑ ÑÑÑок не обÑабаÑÑваÑÑÑÑ, даже еÑли они опÑÐµÐ´ÐµÐ»ÐµÐ½Ñ Ð² пÑбликаÑии. ÐÑо ÑвÑзано Ñ Ñем, ÑÑо ÑÑаÑÑе веÑÑии могÑÑ ÐºÐ¾Ð¿Ð¸ÑоваÑÑ ÑолÑко вÑе даннÑе ÑаблиÑÑ.
28.4.6. ÐбÑединение неÑколÑÐºÐ¸Ñ ÑилÑÑÑов ÑÑÑок #
ÐÑли подпиÑка ÑвÑзана Ñ Ð½ÐµÑколÑкими пÑбликаÑиÑми, в коÑоÑÑÑ
одна и Ñа же ÑаблиÑа опÑбликована Ñ ÑазнÑми ÑилÑÑÑами ÑÑÑок (Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð¹ и Ñой же опеÑаÑии publish), ÑÑи вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¾Ð±ÑединÑÑÑÑÑ Ð²Ð¼ÐµÑÑе, Ñак ÑÑо ÑеплиÑиÑоваÑÑÑÑ Ð±ÑдÑÑ ÑÑÑоки, ÑдовлеÑвоÑÑÑÑие лÑÐ±Ð¾Ð¼Ñ Ð¸Ð· вÑÑажений. ÐÑо ознаÑаеÑ, ÑÑо вÑе оÑÑалÑнÑе ÑилÑÑÑÑ ÑÑÑок Ð´Ð»Ñ Ñой же ÑаблиÑÑ ÑÑановÑÑÑÑ Ð¸Ð·Ð±ÑÑоÑнÑми, еÑли:
У одной из пÑбликаÑий Ð½ÐµÑ ÑилÑÑÑа ÑÑÑок.
Ðдна из пÑбликаÑий бÑла Ñоздана Ñ Ð¿Ñедложением
FOR ALL TABLES. ÐÑо пÑедложение не позволÑÐµÑ Ð¸ÑполÑзоваÑÑ ÑилÑÑÑÑ ÑÑÑок.Ðдна из пÑбликаÑий бÑла Ñоздана Ñ Ð¿Ñедложением
FOR TABLES IN SCHEMAи ÑÐµÐ»ÐµÐ²Ð°Ñ ÑаблиÑа пÑÐ¸Ð½Ð°Ð´Ð»ÐµÐ¶Ð¸Ñ Ñказанной ÑÑ ÐµÐ¼Ðµ. ÐÑо пÑедложение не позволÑÐµÑ Ð¸ÑполÑзоваÑÑ ÑилÑÑÑÑ ÑÑÑок.
28.4.7. ÐÑимеÑÑ #
СоздайÑе неÑколÑко ÑаблиÑ, коÑоÑÑе бÑдÑÑ Ð¸ÑполÑзоваÑÑÑÑ Ð² ÑледÑÑÑÐ¸Ñ Ð¿ÑимеÑÐ°Ñ .
/* pub # */ CREATE TABLE t1(a int, b int, c text, PRIMARY KEY(a,c)); /* pub # */ CREATE TABLE t2(d int, e int, f int, PRIMARY KEY(d)); /* pub # */ CREATE TABLE t3(g int, h int, i int, PRIMARY KEY(g));
СоздайÑе неÑколÑко пÑбликаÑий. ÐÑбликаÑÐ¸Ñ p1 ÑодеÑÐ¶Ð¸Ñ Ð¾Ð´Ð½Ñ ÑаблиÑÑ (t1), и Ð´Ð»Ñ Ð½ÐµÑ Ð¾Ð¿ÑеделÑеÑÑÑ ÑилÑÑÑ ÑÑÑок. ÐÑбликаÑÐ¸Ñ p2 ÑодеÑÐ¶Ð¸Ñ Ð´Ð²Ðµ ÑаблиÑÑ, и ÑилÑÑÑ ÑÑÑок опÑеделÑн Ð´Ð»Ñ t2, но оÑÑÑÑÑÑвÑÐµÑ Ð´Ð»Ñ t1. ÐÑбликаÑÐ¸Ñ p3 ÑодеÑÐ¶Ð¸Ñ Ð´Ð²Ðµ ÑаблиÑÑ, и ÑилÑÑÑ ÑÑÑок опÑеделÑн Ð´Ð»Ñ Ð¾Ð±ÐµÐ¸Ñ
.
/* pub # */ CREATE PUBLICATION p1 FOR TABLE t1 WHERE (a > 5 AND c = 'NSW'); /* pub # */ CREATE PUBLICATION p2 FOR TABLE t1, t2 WHERE (e = 99); /* pub # */ CREATE PUBLICATION p3 FOR TABLE t2 WHERE (d = 10), t3 WHERE (g = 10);
ÐÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ ÑилÑÑÑов ÑÑÑок Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ пÑбликаÑии можно пÑоÑмоÑÑеÑÑ Ð² psql.
/* pub # */ \dRp+
Publication p1
Owner | All tables | Inserts | Updates | Deletes | Truncates | Generated columns | Via root
----------+------------+---------+---------+---------+-----------+-------------------+----------
postgres | f | t | t | t | t | none | f
Tables:
"public.t1" WHERE ((a > 5) AND (c = 'NSW'::text))
Publication p2
Owner | All tables | Inserts | Updates | Deletes | Truncates | Generated columns | Via root
----------+------------+---------+---------+---------+-----------+-------------------+----------
postgres | f | t | t | t | t | none | f
Tables:
"public.t1"
"public.t2" WHERE (e = 99)
Publication p3
Owner | All tables | Inserts | Updates | Deletes | Truncates | Generated columns | Via root
----------+------------+---------+---------+---------+-----------+-------------------+----------
postgres | f | t | t | t | t | none | f
Tables:
"public.t2" WHERE (d = 10)
"public.t3" WHERE (g = 10)
Также в psql можно пÑоÑмоÑÑеÑÑ Ð²ÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ ÑилÑÑÑов ÑÑÑок Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ ÑаблиÑÑ. ÐбÑаÑиÑе внимание: ÑаблиÑа t1 ÑвлÑеÑÑÑ Ñленом двÑÑ
пÑбликаÑий, но Ð¸Ð¼ÐµÐµÑ ÑилÑÑÑ ÑÑÑок ÑолÑко в p1, а ÑаблиÑа t2 ÑвлÑеÑÑÑ Ñленом двÑÑ
пÑбликаÑий и Ð¸Ð¼ÐµÐµÑ Ð² ниÑ
ÑазнÑе ÑилÑÑÑÑ ÑÑÑок.
/* pub # */ \d t1
Table "public.t1"
Column | Type | Collation | Nullable | Default
--------+---------+-----------+----------+---------
a | integer | | not null |
b | integer | | |
c | text | | not null |
Indexes:
"t1_pkey" PRIMARY KEY, btree (a, c)
Publications:
"p1" WHERE ((a > 5) AND (c = 'NSW'::text))
"p2"
/* pub # */ \d t2
Table "public.t2"
Column | Type | Collation | Nullable | Default
--------+---------+-----------+----------+---------
d | integer | | not null |
e | integer | | |
f | integer | | |
Indexes:
"t2_pkey" PRIMARY KEY, btree (d)
Publications:
"p2" WHERE (e = 99)
"p3" WHERE (d = 10)
/* pub # */ \d t3
Table "public.t3"
Column | Type | Collation | Nullable | Default
--------+---------+-----------+----------+---------
g | integer | | not null |
h | integer | | |
i | integer | | |
Indexes:
"t3_pkey" PRIMARY KEY, btree (g)
Publications:
"p3" WHERE (g = 10)
СоздайÑе на ÑеÑвеÑе подпиÑÑика ÑаблиÑÑ t1 Ñ Ñем же опÑеделением, ÑÑо и на пÑбликÑÑÑем ÑеÑвеÑе, а Ñакже ÑоздайÑе подпиÑÐºÑ s1, ÑвÑзаннÑÑ Ñ Ð¿ÑбликаÑией p1.
/* sub # */ CREATE TABLE t1(a int, b int, c text, PRIMARY KEY(a,c)); /* sub # */ CREATE SUBSCRIPTION s1 /* sub - */ CONNECTION 'host=localhost dbname=test_pub application_name=s1' /* sub - */ PUBLICATION p1;
ÐÑÑавÑÑе неÑколÑко ÑÑÑок. РеплиÑиÑоваÑÑÑÑ Ð±ÑдÑÑ ÑолÑко ÑÑÑоки, ÑооÑвеÑÑÑвÑÑÑие пÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ t1 WHERE пÑбликаÑии p1.
/* pub # */ INSERT INTO t1 VALUES (2, 102, 'NSW'); /* pub # */ INSERT INTO t1 VALUES (3, 103, 'QLD'); /* pub # */ INSERT INTO t1 VALUES (4, 104, 'VIC'); /* pub # */ INSERT INTO t1 VALUES (5, 105, 'ACT'); /* pub # */ INSERT INTO t1 VALUES (6, 106, 'NSW'); /* pub # */ INSERT INTO t1 VALUES (7, 107, 'NT'); /* pub # */ INSERT INTO t1 VALUES (8, 108, 'QLD'); /* pub # */ INSERT INTO t1 VALUES (9, 109, 'NSW'); /* pub # */ SELECT * FROM t1; a | b | c ---+-----+----- 2 | 102 | NSW 3 | 103 | QLD 4 | 104 | VIC 5 | 105 | ACT 6 | 106 | NSW 7 | 107 | NT 8 | 108 | QLD 9 | 109 | NSW (8 rows)
/* sub # */ SELECT * FROM t1; a | b | c ---+-----+----- 6 | 106 | NSW 9 | 109 | NSW (2 rows)
ÐзмениÑе некоÑоÑÑе даннÑе, в коÑоÑÑÑ
и ÑÑаÑое, и новое знаÑÐµÐ½Ð¸Ñ ÑÑÑоки ÑооÑвеÑÑÑвÑÑÑ ÑÑÐ»Ð¾Ð²Ð¸Ñ t1 WHERE пÑбликаÑии p1. ÐпеÑаÑÐ¸Ñ UPDATE бÑÐ´ÐµÑ ÑеплиÑиÑоваÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÐºÐ°Ðº обÑÑно.
/* pub # */ UPDATE t1 SET b = 999 WHERE a = 6; /* pub # */ SELECT * FROM t1; a | b | c ---+-----+----- 2 | 102 | NSW 3 | 103 | QLD 4 | 104 | VIC 5 | 105 | ACT 7 | 107 | NT 8 | 108 | QLD 9 | 109 | NSW 6 | 999 | NSW (8 rows)
/* sub # */ SELECT * FROM t1; a | b | c ---+-----+----- 9 | 109 | NSW 6 | 999 | NSW (2 rows)
ÐзмениÑе некоÑоÑÑе даннÑе, в коÑоÑÑÑ
ÑÑаÑÑе знаÑÐµÐ½Ð¸Ñ ÑÑÑок не ÑооÑвеÑÑÑвÑÑÑ ÑÑÐ»Ð¾Ð²Ð¸Ñ t1 WHERE пÑбликаÑии p1, а новÑе знаÑÐµÐ½Ð¸Ñ ÑÑÑок â ÑооÑвеÑÑÑвÑÑÑ. ÐпеÑаÑÐ¸Ñ UPDATE бÑÐ´ÐµÑ Ð¿ÑеобÑазована в INSERT и ÑеплиÑиÑÑеÑÑÑ Ð² Ñаком виде. ÐоÑмоÑÑиÑе на новÑÑ ÑÑÑÐ¾ÐºÑ Ð² ÑаблиÑе подпиÑÑика.
/* pub # */ UPDATE t1 SET a = 555 WHERE a = 2; /* pub # */ SELECT * FROM t1; a | b | c -----+-----+----- 3 | 103 | QLD 4 | 104 | VIC 5 | 105 | ACT 7 | 107 | NT 8 | 108 | QLD 9 | 109 | NSW 6 | 999 | NSW 555 | 102 | NSW (8 rows)
/* sub # */ SELECT * FROM t1; a | b | c -----+-----+----- 9 | 109 | NSW 6 | 999 | NSW 555 | 102 | NSW (3 rows)
ÐзмениÑе некоÑоÑÑе даннÑе, в коÑоÑÑÑ
ÑÑаÑÑе знаÑÐµÐ½Ð¸Ñ ÑÑÑок ÑооÑвеÑÑÑвÑÑÑ ÑÑÐ»Ð¾Ð²Ð¸Ñ t1 WHERE пÑбликаÑии p1, а новÑе знаÑÐµÐ½Ð¸Ñ â не ÑооÑвеÑÑÑвÑÑÑ. ÐпеÑаÑÐ¸Ñ UPDATE бÑÐ´ÐµÑ Ð¿ÑеобÑазована в DELETE и ÑеплиÑиÑÑеÑÑÑ Ð² Ñаком виде. ÐбÑаÑиÑе внимание, ÑÑÑока бÑла Ñдалена из ÑаблиÑÑ Ð¿Ð¾Ð´Ð¿Ð¸ÑÑика.
/* pub # */ UPDATE t1 SET c = 'VIC' WHERE a = 9; /* pub # */ SELECT * FROM t1; a | b | c -----+-----+----- 3 | 103 | QLD 4 | 104 | VIC 5 | 105 | ACT 7 | 107 | NT 8 | 108 | QLD 6 | 999 | NSW 555 | 102 | NSW 9 | 109 | VIC (8 rows)
/* sub # */ SELECT * FROM t1; a | b | c -----+-----+----- 6 | 999 | NSW 555 | 102 | NSW (2 rows)
СледÑÑÑие пÑимеÑÑ Ð¿Ð¾ÐºÐ°Ð·ÑваÑÑ, как в завиÑимоÑÑи Ð¾Ñ Ð¿Ð°ÑамеÑÑа пÑбликаÑии publish_via_partition_root Ð´Ð»Ñ ÑекÑиониÑованнÑÑ
ÑÐ°Ð±Ð»Ð¸Ñ Ð¸ÑполÑзÑеÑÑÑ ÑилÑÑÑ ÑÑÑок ÑодиÑелÑÑкой или доÑеÑней ÑаблиÑÑ.
СоздайÑе ÑекÑиониÑованнÑÑ ÑаблиÑÑ Ð½Ð° пÑбликÑÑÑем ÑеÑвеÑе.
/* pub # */ CREATE TABLE parent(a int PRIMARY KEY) PARTITION BY RANGE(a); /* pub # */ CREATE TABLE child PARTITION OF parent DEFAULT;
СоздайÑе ÑакÑÑ Ð¶Ðµ конÑигÑÑаÑÐ¸Ñ ÑÐ°Ð±Ð»Ð¸Ñ Ð½Ð° подпиÑÑике.
/* sub # */ CREATE TABLE parent(a int PRIMARY KEY) PARTITION BY RANGE(a); /* sub # */ CREATE TABLE child PARTITION OF parent DEFAULT;
СоздайÑе пÑбликаÑÐ¸Ñ p4, а заÑем подпиÑиÑеÑÑ Ð½Ð° неÑ. ÐаÑамеÑÑ Ð¿ÑбликаÑии publish_via_partition_root Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение true. ÐÑи ÑÑом опÑеделÑÑÑÑÑ ÑилÑÑÑÑ ÑÑÑок Ð´Ð»Ñ ÑекÑиониÑованной ÑаблиÑÑ (parent) и Ð´Ð»Ñ ÐµÑ ÑекÑии (child).
/* pub # */ CREATE PUBLICATION p4 FOR TABLE parent WHERE (a < 5), child WHERE (a >= 5) /* pub - */ WITH (publish_via_partition_root=true);
/* sub # */ CREATE SUBSCRIPTION s4 /* sub - */ CONNECTION 'host=localhost dbname=test_pub application_name=s4' /* sub - */ PUBLICATION p4;
ÐÑÑавÑÑе некоÑоÑÑе знаÑÐµÐ½Ð¸Ñ Ð½ÐµÐ¿Ð¾ÑÑедÑÑвенно в ÑаблиÑÑ parent и child. ÐÑи иÑ
ÑепликаÑии бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ ÑилÑÑÑ ÑÑÑок parent (Ñак как publish_via_partition_root Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение true).
/* pub # */ INSERT INTO parent VALUES (2), (4), (6); /* pub # */ INSERT INTO child VALUES (3), (5), (7); /* pub # */ SELECT * FROM parent ORDER BY a; a --- 2 3 4 5 6 7 (6 rows)
/* sub # */ SELECT * FROM parent ORDER BY a; a --- 2 3 4 (3 rows)
ÐовÑоÑиÑе ÑÑ Ð¶Ðµ пÑовеÑÐºÑ Ñ Ð´ÑÑгим знаÑением publish_via_partition_root. ТепеÑÑ Ð¿Ð°ÑамеÑÑ Ð¿ÑбликаÑии publish_via_partition_root бÑÐ´ÐµÑ Ð¸Ð¼ÐµÑÑ Ð·Ð½Ð°Ñение false, а ÑилÑÑÑ ÑÑÑок бÑÐ´ÐµÑ Ð¾Ð¿ÑеделÑн в ÑекÑии (child).
/* pub # */ DROP PUBLICATION p4; /* pub # */ CREATE PUBLICATION p4 FOR TABLE parent, child WHERE (a >= 5) /* pub - */ WITH (publish_via_partition_root=false);
/* sub # */ ALTER SUBSCRIPTION s4 REFRESH PUBLICATION;
ÐÑполниÑе на пÑбликÑÑÑем ÑеÑвеÑе Ñе же опеÑаÑии INSERT. Ðни ÑеплиÑиÑÑÑÑÑÑ Ñ Ð¸ÑполÑзованием ÑилÑÑÑа ÑÑÑок в ÑаблиÑе child (Ñак как publish_via_partition_root Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение false).
/* pub # */ TRUNCATE parent; /* pub # */ INSERT INTO parent VALUES (2), (4), (6); /* pub # */ INSERT INTO child VALUES (3), (5), (7); /* pub # */ SELECT * FROM parent ORDER BY a; a --- 2 3 4 5 6 7 (6 rows)
/* sub # */ SELECT * FROM child ORDER BY a; a --- 5 6 7 (3 rows)