Postgres секционированная таблица исполнителя, возвращающая несогласованные результаты для дочерних таблиц - PullRequest
0 голосов
/ 03 августа 2020

Ситуация

Таблица A разделена и состоит из 5 дочерних таблиц: tableA_1, tableA_2, et c. TableA разделен на «state», varchar с низкой мощностью.

TableA имеет столбец с именем «updated_ts», который автоматически заполняется текущей меткой времени по умолчанию.

Следующий запрос используется для показать строки, которые были обновлены с момента последнего выполнения запроса. '2020-07-30 14:22:01' представляет максимальное значение updated_ts, возвращенное в последний раз.

SELECT *
  FROM TableA
 WHERE updated_ts < '2020-07-30 14:22:01'
 ORDER BY updated_ts DESC 

Проблема

Проблема в том, что иногда результаты вышеуказанного запроса будут отсутствовать строки, которые были обновлены со значением updated_ts за несколько миллисекунд до отсечки ('2020-07-30 14:22:01'). Это означает, что пропущенная строка еще не была жива в той дочерней таблице, в которой она была, когда предыдущий запрос сканировал эту дочернюю таблицу.

Postgres версия 11. Это наблюдается на реплике, поэтому может быть связано с задержкой репликации.

Решение, которое мне нужно

Я ищу решение, которое позволяет мне запрашивать родительскую таблицу и возвращать результаты из всех дочерних таблиц для указанного c момент времени для системы, такой, что никакие строки не могут быть вставлены в дочерние таблицы с updated_ts меньше, чем текущий максимум для всех дочерних таблиц.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...