Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Пустой результат Select при использовании индексов / 8 сообщений из 8, страница 1 из 1
27.10.2021, 14:21
    #40107375
DarthGelos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пустой результат Select при использовании индексов
Доброго дня.
Просьба подсказать, куда стоит влезть и проверить:
Исходная позиция:
Мастер: PostgreSQL 11.12
Таблица с индексом:
CREATE UNIQUE INDEX seller_shop_id_full_name_uindex ON public.seller USING btree (shop_id, full_name)
Слейв 1: PostgreSQL 11.12
Слейв 2: PostgreSQL 11.13


Запрос: select * from seller where shop_id=354 and full_name = 'Москалёв Сергей Викторович';
На мастере выдает результат:
id | full_name | personnel_number | shop_id
---------+----------------------------+------------------+---------
2491002 | Москалёв Сергей Викторович | | 354
План запроса:
QUERY PLAN
-----------------------------------------------------------------------------------------------
Index Scan using seller_shop_id_full_name_uindex on seller (cost=0.41..2.63 rows=1 width=64)
Index Cond: ((shop_id = 354) AND ((full_name)::text = 'Москалёв Сергей Викторович'::text))

На слейве 1: PostgreSQL 11.12
тот же запрос select * from seller where shop_id=354 and full_name = 'Москалёв Сергей Викторович';
id | full_name | personnel_number | shop_id
---------+----------------------------+------------------+---------
2491002 | Москалёв Сергей Викторович | | 354

План запроса:
QUERY PLAN
-----------------------------------------------------------------------------------------------
Index Scan using seller_shop_id_full_name_uindex on seller (cost=0.41..2.63 rows=1 width=64)
Index Cond: ((shop_id = 354) AND ((full_name)::text = 'Москалёв Сергей Викторович'::text))

А вот на слейве 2 PostgreSQL 11.13 тот же запрос select * from seller where shop_id=354 and full_name = 'Москалёв Сергей Викторович'; выдает пустой результат
id | full_name | personnel_number | shop_id
----+-----------+------------------+---------
(0 строк)
QUERY PLAN
-----------------------------------------------------------------------------------------------
Index Scan using seller_shop_id_full_name_uindex on seller (cost=0.41..8.43 rows=1 width=64)
Index Cond: ((shop_id = 354) AND ((full_name)::text = 'Москалёв Сергей Викторович'::text))

Если убрать индекс seller_shop_id_full_name_uindex, все начинает работать. С ним работает только на мастере и 1 слейве.
Причем, если убрать условие и выполнить запрос на слейве 2 select * from seller where full_name = 'Москалёв Сергей Викторович'; будет результат
id | full_name | personnel_number | shop_id
---------+----------------------------+------------------+---------
2491002 | Москалёв Сергей Викторович | | 354


Есть предположение что дело либо в различии минорных версий, но это дикость была бы..
Либо есть какой то параметр на слейв 2, которые как то влияет на поиск..
Порядком голову уже сломал.
Реиндекс и vacuum analyze не помог.
Пересоздание фамилии в ту же строчку тоже не помогла.
Только если удалить индекс составной, тогда работает, но этот индекс нужен обязательно, да и на 1 слейве с ним работает...
...
Рейтинг: 0 / 0
27.10.2021, 14:41
    #40107392
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пустой результат Select при использовании индексов
DarthGelos,

Версии libc проверьте.
https://wiki.postgresql.org/wiki/Locale_data_changes
...
Рейтинг: 0 / 0
27.10.2021, 15:21
    #40107416
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пустой результат Select при использовании индексов
DarthGelos,

Версии OS/libc разные скорее всего... так работать не будет.
https://wiki.postgresql.org/wiki/Locale_data_changes

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
27.10.2021, 15:28
    #40107427
DarthGelos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пустой результат Select при использовании индексов
Похоже что да.
Там версии ОС разные на мастере и 1 слейве одна, на 2 слейве другая.
Проверка ( echo "1-1"; echo "11" ) | LC_COLLATE=en_US.UTF-8 sort
на мастере и 1 слейве выдает:
11
1-1
А на втором слейве
1-1
11
:(
Я только не понял, как это с наличием/отсутствием индекса связано. Сами индексы некорректно работают из-за версии libc?
...
Рейтинг: 0 / 0
27.10.2021, 15:41
    #40107436
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пустой результат Select при использовании индексов
DarthGelos,

представьте себе отсортированное множество. Если вы, используя одну функцию сравнения, пишете данные в одно место, логичное для этой функции сортировки, а вот при чтении пользуетесь другой функцией сравнения, которая говорит что искомые данные нужно искать в другом месте - то вы не найдёте те ранее записанные данные. С точки зрения новой функции сортировки данные записаны в неверном порядке и из-за этого закономерно ломается алгоритм поиска.
...
Рейтинг: 0 / 0
27.10.2021, 15:46
    #40107441
DarthGelos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пустой результат Select при использовании индексов
Melkij,

ясно.. лечить это болячку лучше приведением версии ОС к одному виду?
...
Рейтинг: 0 / 0
27.10.2021, 16:11
    #40107456
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пустой результат Select при использовании индексов
DarthGelos,

да
...
Рейтинг: 0 / 0
09.11.2021, 15:13
    #40110339
DarthGelos
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Пустой результат Select при использовании индексов
Melkij, спасибо, помогло, все заработало
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Пустой результат Select при использовании индексов / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]