В PostgreSQL 16.1 у меня есть очень большая таблица mytable
со столбцом _modified
типа Timestamp с часовым поясом. Когда я запускаю запрос ниже для всей таблицы, он возвращает меньшее значение метки времени по сравнению с тем, когда я запускаю запрос как подмножество таблицы.
Запрос ко всей таблице возвращает 06-11-2023 17:06:38.000
:
select max(cast(_modified at time zone 'UTC' as timestamp))
from mytable
;
Подмножество таблицы возвращает 11-06-2023 17:06:38.001
:
select max(cast(_modified at time zone 'UTC' as timestamp))
from mytable
where mycondition = true
;
Я ожидаю, что запрос без предложенияwhere вернет хотя бы значение подмножества запроса. Не уверен, связано ли это, но я запускаю эти запросы в DBeaver. Кто-нибудь знает, как это могло произойти и как заставить оператор max возвращать правильное значение?
11.06.2023 неоднозначно. Это 6 ноября или 11 июня?
Судя по всему, дата отформатирована как дд-мм-гггг, и ожидаемый результат правильный.
Невозможно ответить без конфигурации данных и временной метки. Но, похоже, у вас вообще нет проблем, просто нам не хватает данных, подтверждающих это.
Я думаю, ваши запросы работают правильно, просто формат, в котором вы получаете результат, dd-mm-yyyy
.
Таким образом, значение во всей таблице (06-11-2023
) больше, чем значение в подмножестве строк (11-06-2023
).
Попробуйте переиндексировать таблицу, используя:
REINDEX TABLE mytable
Вы ведь понимаете, что 6 ноября 2023 года больше, чем 11 июня 2023 года, верно? Другими словами, как показано на данный момент, проблем, похоже, нет, и результаты верны. В противном случае предоставьте минимально воспроизводимый пример (и убедитесь, что он правильный и последовательный).