Как pglogical-2 обрабатывает логическую репликацию в одной и той же таблице, обеспечивая возможность записи в обе базы данных? - PullRequest
0 голосов
/ 07 ноября 2018

enter image description here

Исходя из вышеприведенного изображения, есть определенные таблицы, которые я хочу видеть во внутренней базе данных (справа). Другие таблицы, которые я хочу реплицировать во внешней базе данных.

В действительности существует только один набор значений, которые НЕ ДОЛЖНЫ реплицироваться. Остальная часть базы данных может быть реплицирована. По сути, столбцы фактической цены в таблице prices нельзя реплицировать по всему. Он должен оставаться во внутренней базе данных.

Поскольку поставщики являются внешними по отношению к сети, они не имеют доступа к внутреннему приложению.

Мой план состоит в том, чтобы создать реплицированную версию того же приложения и позволить поставщикам отправлять предложения и выбирать товары.

Допустим, реплицированные таблицы имеют как минимум quotations и quotation_line_items. Эти таблицы должны быть доступны для записи (с точки зрения данных для INSERT, UPDATE и DELETE) в как во внешней базе данных, так и во внутренней базе данных . Следовательно, в обеих базах данных данные в таблицах quotations и quotation_line_items доступны для записи и должны реплицироваться в обоих направлениях.

Данные в других таблицах будут реплицироваться в одном направлении (от внутреннего к внешнему), за исключением столбцов фактических исходных цен в таблице prices.

Таблица quotation_line_items будет иметь столбец price_id. Однако исходные значения цен в таблице prices не должны отображаться во внешней базе данных.

В конечном счете, я хочу, чтобы данные были согласованы для реплицируемых таблиц в обеих базах данных. Я в порядке с синхронной репликацией, поэтому небольшая задержка (скажем, пара секунд для операций записи) в порядке.

Я наткнулся на пгл. https://github.com/2ndQuadrant/pglogical/tree/REL2_x_STABLE

и у них есть понятие ИЗДАТЕЛЬ и ПОДПИСЧИК.

Я не могу сказать на основании файла readme, кто будет выступать в качестве издателя и подписчика, и как настроить его для моей ситуации.

1 Ответ

0 голосов
/ 07 ноября 2018

Это не сработает. С настройкой, о которой вы мечтаете, вы обязательно столкнетесь с конфликтами репликации.

Как вы хотите предотвратить конфликтующие изменения данных в двух базах данных? Если вы говорите, что этого не произойдет, подумайте еще раз.

Я полагаю, что вам было бы гораздо лучше использовать одну базу данных с двумя пользователями: одну, которая может получить доступ к & ldquo; secret & rdquo; стол и тот, который не может.

Если вы хотите ограничить доступ только к определенным столбцам, используйте представление. Простые представления обновляются в PostgreSQL.

...