как выполнить поиск без учета регистра в столбце JSONB Postgres 9.4?

я использую этот запрос для поиска данных в таблице, где profile является столбцом JSONB, и он работает, но только если имя именно такое

SELECT * FROM "users" WHERE "profile" @> '{"name":"Super User"}'

возможно ли иметь большую гибкость, например нечувствительность к регистру, подстановочные знаки и т. д.?

Что-то вроде "Super%" или "super user"


person G3z    schedule 28.12.2014    source источник
comment
Для этого нам понадобится что-то вроде языка запросов json. Ничего подобного встроенного нет, но некоторые люди работают над расширением языка запросов json. Я не могу найти ссылки прямо сейчас, но это обсуждалось на PGConf EU 2014 в Мадриде; возможно, посмотрите на список сеансов конференции.   -  person Craig Ringer    schedule 29.12.2014
comment
вы имеете в виду github.com/akorotkov/jsquery? я попробую это   -  person G3z    schedule 29.12.2014
comment
Да, это он. Выглядело довольно интересно. Я не знаю, насколько это стабильно/зрело/задокументировано/и т. д.   -  person Craig Ringer    schedule 29.12.2014


Ответы (1)


Я нашел решение своей проблемы:

SELECT * FROM "users" WHERE (profile #>> '{name}') ILIKE 'super %'

Я не знаю, достаточно ли хорошо это работает, но это работает.
Вероятно, было бы разумно добавить к нему индекс.

person G3z    schedule 29.12.2014
comment
Какой индекс имеет смысл в этой ситуации? Я понял, что GIN только ускоряет запросы сдерживания/существования по ключам. - person Tarlen; 23.10.2016
comment
Классно, чувак! Это сработало для меня как шарм! Для всех, кто также застревает при обходе вложенных объектов, просто используйте: profile #>> '{fullname, firstname,...}'. Здесь ваш объект будет выглядеть так: {fullname: {firstname: 'abc'}} - person Shyam Kansagra; 19.06.2018