Я пытаюсь запустить логическую репликацию PostgreSQL (10.6) между двумя серверами только на одной таблице. Таблица имеет Id (int2) в качестве первичного ключа. Это сделано намеренно, и таблица действует как скользящее окно для некоторых данных временного ряда IoT. Это тяжело писать на главном узле. Вся таблица содержит данные датчиков примерно за 10 минут. И это дизайн, который мы хотели бы сохранить.
Логическая репликация между узлами Master и Replica прекрасно работает, пока не произойдет сбой в сети, продолжающийся более 1 часа. Тем временем, PostgreSQL на главном узле собирает файлы WAL с пошаговой вставкой / обновлением таблицы. Таким образом, файлы WAL могут содержать даже несколько часов данных, которые нам не интересны, и им потребуется вечное воспроизведение, шаг за шагом, из Master -> Replica при восстановлении соединения. Это в основном воспроизведение записей, которых долгое время не существует в таблице базы данных!
Как настроить так, чтобы воспроизводились только релевантные данные? Если это трудно сделать, есть ли способ отбросить файлы WAL старше, скажем, на 10 минут, чтобы они просто не отправлялись?
Я пытался играть с настройками postgresql.conf. Я не уверен, что если есть флаг, я могу ограничить хранение файлов WAL в случае отключения слота репликации.
Вот как выглядит таблица:
CREATE TABLE iot_ts (id int2 not null, time timestamp(0) not null, value real, primary key(id));
Мне бы хотелось, чтобы логическая репликация такой таблицы была настроена таким образом, чтобы при длительном отключении интернета восстановление происходило быстро и содержало только самые последние данные.