Gymterview
senior

Какие виды репликации поддерживает PostgreSQL?

PostgreSQL поддерживает два основных вида репликации: потоковую (streaming/физическую) и логическую (logical). Потоковая реплицирует всю БД побайтово через WAL-поток, логическая — отдельные таблицы на уровне SQL-операций.

Потоковая (физическая) репликация

Пример
Мастер (Primary) ---> WAL stream ---> Реплика (Standby)
  • Реплицируется вся база данных целиком (нельзя выбрать отдельные таблицы)
  • Реплика может быть «горячей» (hot standby) — принимает запросы на чтение
  • Синхронная или асинхронная репликация
  • Используется для отказоустойчивости (failover) и масштабирования чтения

Синхронная vs асинхронная

  • Асинхронная (по умолчанию) — мастер не ждёт подтверждения от реплики. Возможна потеря данных при падении мастера
  • Синхронная — мастер ждёт подтверждения от реплики перед COMMIT. Нулевая потеря данных, но выше задержка записи

Логическая репликация (PostgreSQL 10+)

Пример
-- На мастере (publisher)
CREATE PUBLICATION payments_pub FOR TABLE transactions, accounts;

-- На подписчике (subscriber)
CREATE SUBSCRIPTION payments_sub
    CONNECTION 'host=master port=5432 dbname=bank user=replicator'
    PUBLICATION payments_pub;
  • Можно реплицировать отдельные таблицы
  • Можно реплицировать между разными версиями PostgreSQL
  • Подписчик может иметь собственные индексы, триггеры
  • Подписчик может быть доступен для записи

Сравнение

Свойство Потоковая Логическая
Единица репликации Вся БД Таблицы
Формат Физический (WAL-байты) Логический (SQL-операции)
Запись на реплике Нет Да
Разные версии PG Нет Да
DDL-репликация Да Нет
Применение Failover, чтение Миграция, частичная репликация

На собеседовании: покажите понимание сценариев: потоковая — для failover и read-replicas, логическая — для миграции между версиями и частичной репликации. Упомяните, что логическая не реплицирует DDL (ALTER TABLE) — это частый подводный камень при миграции.