Код: Выделить всё
COMMITМы используем специального потребителя Spring Boot, читающего из логического слота репликации через PGReplicationStream (
Код: Выделить всё
pgoutputМы уже пробовали/исключили:
- Таблица Heartbeat (вне публикации)
Запись в фиктивную таблицу, отсутствующую в публикации, используемой для генерации BEGIN/пары в PG17. PG18 полностью исключает эти пары, поэтому подход мертв.Код: Выделить всё
COMMIT - Таблица Heartbeat внутри публикации
Работает механически, но мы пересылаем все декодированные сообщения в Kafka, поэтому каждая запись Heartbeat создает ложное событие изменения, которое потребители должны отфильтровывать. Мы хотим избежать загрязнения темы Кафки. - (периодические обновления статуса ожидания)[/b]
Код: Выделить всё
status-interval-sec > 0
Дополнительные возможности write_lsn/в pg_replication_slots, но не продвигает подтвержденный_flush_lsn, что нам действительно нужно для предотвращения накопления WAL.Код: Выделить всё
flush_lsn
В частности, я ищу:
- Опцию WAL sender / pgoutput (опция слота, proto_version, параметр публикации и т. д.), которая заставляет сервер выдавать какой-то периодический маркер позиции или поддерживать активность, которая содержит текущую позицию WAL — то, что клиент может использовать для вызоваstream.setFlushedLSN() / stream.forceUpdateStatus() осмысленно.
- Или механизм на стороне сервера (GUC, команда репликации и т. д.) для периодической очистки слота до текущей позиции WAL без необходимости видимого для клиента события изменения.
- PostgreSQL 18.2
- Драйвер JDBC 42.7.x, PGReplicationStream
- , proto_version=4
Код: Выделить всё
pgoutput - Java 17 / Spring Boot 2.4.13