Глава 30. Логическая репликация#

Глава 30. Логическая репликация

Глава 30. Логическая репликация

Логическая репликация - это метод репликации объектов данных и их изменений на основе их идентификатора репликации (обычно первичного ключа). Мы используем термин "логическая" в отличие от физической репликации, которая использует точные адреса блоков и репликацию байт-в-байт. PostgreSQL поддерживает оба механизма одновременно, см. Глава 26. Логическая репликация позволяет тонко настраивать как репликацию данных, так и безопасность.

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

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

Типичные сценарии использования для логической репликации включают:

  • Отправка инкрементных изменений в одну базу данных или подмножество базы данных подписчикам по мере их возникновения.

  • Запуск триггеров для отдельных изменений по мере их поступления на подписчика.

  • Слияние нескольких баз данных в одну (например, для аналитических целей).

  • Репликация между разными основными версиями PostgreSQL.

  • Репликация между экземплярами PostgreSQL на разных платформах (например, с Linux на Windows)

  • Предоставление доступа к реплицированным данным различным группам пользователей.

  • Совместное использование подмножества базы данных между несколькими базами данных.

База данных абонента ведет себя так же, как и любой другой экземпляр PostgreSQL, и может использоваться в качестве издателя для других баз данных путем определения собственных публикаций. Когда абонент рассматривается как только для чтения приложением, не будет конфликтов из-за одной подписки. С другой стороны, если другие записи выполняются либо приложением, либо другими абонентами к тому же набору таблиц, могут возникать конфликты.