Heim >Datenbank >MySQL-Tutorial >Wie frage ich nach Übereinstimmungen mit JSON-Array-Elementen in PostgreSQL?
JSON-Array-Elementübereinstimmung in PostgreSQL abfragen
Der JSON-Datentyp von PostgreSQL kann beim Abfragen bestimmter Elemente in verschachtelten Arrays schwierig sein. Betrachten Sie das folgende Beispiel:
<code>{ "objects": [{"src":"foo.png"}, {"src":"bar.png"}], "background":"background.png" }</code>
Um die Datensätze abzufragen, deren „src“-Wert mit „foo.png“ im „objects“-Array übereinstimmt, können Sie einen lateralen Join in der FROM-Klausel verwenden.
PostgreSQL 9.3 und höher
Verwenden Sie für PostgreSQL 9.3 und höher die Funktion json_array_elements()
, um das Array „objects“ zu erweitern und jedes Element zu testen:
<code class="language-sql">SELECT data::text, obj FROM reports r, json_array_elements(r.data#>'{objects}') obj WHERE obj->>'src' = 'foo.png';</code>
PostgreSQL 9.4 und höher
In PostgreSQL 9.4 und höher sollten Sie die Funktion jsonb_array_elements()
verwenden und einen passenden GIN-Index für den Ausdruck erstellen:
<code class="language-sql">CREATE INDEX reports_data_gin_idx ON reports USING gin ((data->'objects') jsonb_path_ops); SELECT * FROM reports WHERE data->'objects' @> '[{"src":"foo.png"}]';</code>
Denken Sie daran, dass beim Array-Matching die Elemente in eckige Klammern eingeschlossen werden müssen, während beim normalen Objekt-Matching keine Klammern erforderlich sind. Weitere Details und Problemumgehungen finden Sie in der verlinkten Dokumentation und anderen in der Frage bereitgestellten Ressourcen.
Das obige ist der detaillierte Inhalt vonWie frage ich nach Übereinstimmungen mit JSON-Array-Elementen in PostgreSQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!