найти строку в таблице по текстовому полю.
В таблице есть две записи с полем token типа text с одинаковым значением token = 'string'. При запросе where token = 'string' или where token like 'string' выводит только одну запись, но если сделать where token like '%string' или вообще вместо любого символа поставить процент - находит обе. Значения равны, сравнивал и напрямую, и через md5. Добавил руками две новые записи с другими одинаковыми значениями - там все нормально.
Строка алфавитно-цифровая, без спецсимволов.
Это, к сожалению, может быть тонким намёком на битый индекс. :( Посмотрите \d таблицы, и сравните планы этих запросов.
спасибо. да, в первом случае там index scan
А в другом seq. scan, так? Да, скорее всего, индекс битый — проверьте "железо" и т.п. :( Из более "утешительного" — выясните, актуальная ли это версия PostgreSQL, не обновляли ли недавно версию glibc в самой OS, мало ли (см. https://wiki.postgresql.org/wiki/Locale_data_changes ).
да, все так. вообще такая штука не в первый раз. железо - виртуалка на хетцнере. реиндекс помог.
Подождите, всё как? Если это не bug / glibc и т.п. — то, что Вы сделали, это не "помощь", это Вы corruption "под ковёр замели" (т.е. данные-то уже битые, возможно). Нехорошо так поступать, если это важные данные.
> в другом seq. scan сервер тестовый, данные не особо нужны. Но выяснить причину надо.
Обсуждают сегодня