Postgres: логическая репликация и восстановление?

Доброго времени суток!

Помогите разобраться с логической репликацией в Postgres.

У меня есть две виртуалки - одна основная (srv1), вторая резервная (srv2), то есть одновременно приложение, использующее базу в Postgres, работает только на одном сервере. Я настроил простую логическую репликацию между srv1 и srv2:

- создал публикацию на srv1 и подписку на srv2 (выключенную)
- cделал дамп со схемами таблиц из базы на srv1 и накатил на srv2
- создал публикацию и подписку (включенную) на srv2

Данные реплицируются с srv1 на srv2. В моем случае, теперь, когда нужно будет чтобы приложение работало только на srv2, я хочу запустить репликацю в обратку. Для этого я выключаю подписку на srv2 и включаю на srv1. Теперь данные реплицируются в обратном направлении

У меня вопрос - это правильный подход вообще?

Если да, то не пойму - логическая репликация хоть и вроде как инкрементальная, то при изменении направления репликации на с srv2 на srv1 (где есть база с существующими данными) возникают конфликты репликации - Postgres жалуется на то что такие-то записи уже существуют. И в итоге я могу это победить только если сделаю truncate таблиц на srv1 - тогда все вливается нормально. Так же, можно создать subscription с copy_data = false, тогда в базу будут добавляться только новые данные и конфликта не будет.

Это правильно что при изменении направления репликации нужно делать truncate существующих данных или создавать подписку с copy_data = false - для реплики только новых данных?

Заранее спасибо!
  • Вопрос задан
  • 78 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы