Ich habe eine Tabelle mit JSON-Array-Daten, die ich durchsuchen möchte.
%Vor%Wie in dieser Antwort beschrieben, habe ich eine Funktion erstellt, mit der auch ein Index für die Array-Daten erstellt werden kann (wichtig) .
%Vor%Das funktioniert gut, wenn ich einen ganzen Wert finden möchte (zB "Wert B1"):
%Vor%Jetzt meine Fragen:
Ist es möglich, Werte mit einem Platzhalter zu finden (zB "Value *")? Etwas wie der folgende (naive) Ansatz:
%Vor%Ist es möglich, numerische Werte mit Vergleichsoperatoren zu finden (z. B. & gt; = 10)? Wieder ein naives und offensichtlich falsches Vorgehen:
%Vor% Ich habe versucht, eine neue Funktion zu erstellen, die int[]
zurückgibt, aber das hat nicht funktioniert.
Ich habe eine SQL Fiddle erstellt, um mein Problem zu veranschaulichen.
Oder wäre es besser, einen anderen Ansatz wie die folgenden funktionierenden Abfragen zu verwenden:
%Vor%und
%Vor%Für diese Abfragen konnte ich jedoch keinen Index erstellen, der tatsächlich von den Abfragen aufgenommen wurde.
Außerdem möchte ich all dies in Postgresql 9.4 mit JSONB implementieren, aber ich denke, für die obigen Fragen sollte das kein Problem sein.
Vielen Dank!
Ich weiß, dass es eine Weile her ist, aber ich tuckerte nur etwas Ähnliches (mit Hilfe von Wildcards, um json-Datentypen abzufragen) und dachte, ich würde teilen, was ich gefunden habe.
Erstens war dies ein großer Punkt in die richtige Richtung: Ссылка
Das Mitnehmen ist, dass Ihre Methode, das json-Element in etwas anderes zu explodieren (ein Record-Set), der richtige Weg ist. Sie können die JSON-Elemente mit normalen Postgres-Inhalten abfragen.
In meinem Fall:
%Vor%Beispielabfrage
%Vor%Und um Ihre Frage zu jsonb zu beantworten: Es sieht so aus, als wäre jsonb die bessere Route, die meiste Zeit. Es hat mehr Methoden und schnellere Lese- (aber langsamere Schreib-) Zeiten.
Quellen:
Glückliche Jagd!
Tags und Links sql json postgresql indexing