Репликация в PostgreSQL: физическая и логическая, отставание реплик, переключение
Физическая (потоковая) репликация копирует WAL байт в байт: реплика — точная копия основного узла, годится для отказоустойчивости и чтения, но нельзя реплицировать отдельные таблицы или писать в реплику. Логическая передаёт изменения строк через публикации и подписки: можно выбрать таблицы, реплицировать между разными мажорными версиями, писать в подписчика — ценой отсутствия DDL в потоке и необходимости следить за слотами. Отставание меряют не в байтах, а во времени: pg_last_xact_replay_timestamp() даёт задержку применения. Главные ловушки: чтение с реплики после записи возвращает старые данные, поэтому «прочитай своё же изменение» требует чтения с основного узла или ожидания LSN; застрявший слот репликации удерживает WAL и мёртвые версии, из-за чего диск основного узла заполняется, а вакуум перестаёт убирать мусор. Синхронный коммит защищает от потери транзакций, но добавляет сетевой круг к каждой записи.