Я пытаюсь реализовать надежную очередь с несколькими авторами и несколькими читателями, использующими базу данных postgres. Как избежать пропущенных строк, когда считыватель очередей сканирует таблицу, а затем выполняемые транзакции фиксируют после ее чтения.
У нас есть читатель, который выбирает строки в партиях, используя время "контрольной точки", где каждая партия получает строки после последней отметки времени в предыдущей партии, и нам не хватает строк. (Причина: значение временной метки основано на времени, в течение которого происходит INSERT (00.00.00). При тяжелых нагрузках, если транзакция занимает больше времени, она вставлена, скажем, через 10 секунд (00.00.10), читатель пропустит эту строку (row1), если он читает в течение этих 10 секунд и находит строку, у которой было время INSERT в более позднее время (00.00.05), чем строка 1. Полное описание проблемы аналогично описанию в этом блоге. http://blog.thefourthparty.com/stopping-time-in-postgresql/)
Связанный предыдущий вопрос для контекста: Postgres LISTEN/NOTIFY - низкая задержка, в реальном времени?
Обновление: я обновил вопрос, имея один читатель для нескольких читателей. Порядок, в котором читатель читает, имеет значение.