Фізична (потокова) реплікація передає на репліку WAL - журнал змін на рівні байтів сторінок. Репліка - точна побайтова копія всього кластера.
- Копіюється все: усі бази, таблиці, індекси, зміни схеми.
- Репліка лише для читання (hot standby) і може стати новим primary при відмові.
- Primary і репліка мусять мати ту саму мажорну версію й архітектуру.
Логічна реплікація передає зміни даних на рівні рядків - «вставлено цей рядок у таку таблицю» - за моделлю публікація/підписка:
-- на джерелі
CREATE PUBLICATION orders_pub FOR TABLE orders, order_items;
-- на отримувачі
CREATE SUBSCRIPTION orders_sub
CONNECTION 'host=primary dbname=app user=replicator'
PUBLICATION orders_pub;
- Можна реплікувати окремі таблиці (і навіть рядки й колонки - з PostgreSQL 15).
- Отримувач - звичайна база, у яку можна писати: мати власні таблиці, індекси, іншу структуру.
- Працює між різними мажорними версіями - основа оновлення з мінімальним простоєм.
Обмеження логічної реплікації:
- Зміни схеми (DDL) не реплікуються - таблиці на отримувачі створюють і змінюють окремо.
- Послідовності не реплікуються - перед перемиканням їх значення переносять вручну.
- Таблиці потребують ідентифікатора рядка (первинний ключ або
REPLICA IDENTITY) дляUPDATEіDELETE. - Конфлікти (наприклад, порушення унікальності на отримувачі) зупиняють підписку, доки їх не розв'язати.
Типові задачі:
- Фізична - відмовостійкість, масштабування читання, бекапи з репліки.
- Логічна - оновлення версії без простою, міграція на інший сервер чи в хмару, передача частини даних в аналітичне сховище, консолідація кількох баз в одну.
Обидві використовують слоти реплікації, і забутий неактивний слот утримує WAL на диску primary - це поширена причина переповнення диска.