2014-12-28 5 views
6

ich bin diese Abfrage für Daten in einer Tabelle zu suchen, wo profile eine JSONB Spalte ist und es funktioniert aber nur, wenn der Name genau dieWie führe ich eine Suche nach Groß- und Kleinschreibung in einer Postgres 9.4 JSONB-Spalte durch?

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

ist, ist es möglich, mehr Flexibilität wie Groß- und Kleinschreibung haben , Wildcards und so weiter?

So etwas wie "Super%" oder "super user"

+1

Um dies zu tun, würden wir etwas wie eine JSON-Abfragesprache benötigen. Es gibt nichts Vergleichbares, aber einige Leute arbeiten an einer json-Query-Spracherweiterung. Ich kann derzeit keine Referenzen finden, aber es wurde auf der PGConf EU 2014 in Madrid diskutiert; Schau dir vielleicht die Liste der Konferenzsitzungen an. –

+1

beziehen Sie sich auf https://github.com/akorotkov/jsquery? Ich werde versuchen, dass – G3z

+0

Ja, das ist die eine. Es sah ziemlich interessant aus. Ich weiß nicht, wie stabil/ausgereift/dokumentiert/etc es ist. –

Antwort

8

ich die Lösung für mein Problem gefunden:

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

Ich weiß nicht, ob dies gut genug ausführt, aber es funktioniert.
Wahrscheinlich ist es klug, einen Index hinzuzufügen.

+0

Welche Art von Index ist in dieser Situation sinnvoll? Ich verstand GIN als nur Beschleunigung Eindämmung/Existenz Abfragen auf Schlüsseln – Tarlen