В таблице есть колонка:
sourcetimestamp timestamp NOT NULL и в ней есть значение '2022-05-16 04:49:20.489'
Когда я делаю такой запрос и хочу получить одну запись, то после запроса записей нет. Т.е. сравнение вплоть до миллисекунд, не отрабатывает.
SELECT *
FROM mytable
WHERE sourcetimestamp = '2022-05-16 04:49:20.489'
Делаю >= то найденная строка первая в списке. Почему не ищет по = и полному значению? Может я что то упускаю в постгре?
Возможно, по этому полю есть индэкс и он сломан. Возможно такжэ, вы неправильно видите это значение (с ним что-то делает ваш клиент). Попробуйте, для начала, set enable_indexscan=false -- и проверить, как тот жэ запрос пройдёт с seqscan (проверить, что он идёт с seqscan -- через explain). Если не получится -- начинайте объяснять, что у вас за клиент или сравнивать с результатами psql.
хорошо. спасибо за совет.
Ещё вариант (более вероятный, чем с микросекундами) -- что ваш клиент прострелил себе ногу с преобразованием таймзон. Так-то в общем всё должно быть очевидно -- в timestamp не учитывается таймзона, значения при простом выводе отправляются как есть, при простом вводе -- переданное сразу из текста преобразуется в timestamp, тожэ без учёта таймзон. Всё должно быть один-в-один с выводом без особых преобразований. Но клиент, увидев поле типа timestamp, мог поразвлекаться с выводом. В общем, если поиск через seqscan его не найдёт (т.е. это не сломанный индэкс) -- то открывайте через psql, повторяйте запросы на вывод этого значения и на его поиск.
Обсуждают сегодня