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) — это частый подводный камень при миграции.