Heim >Datenbank >MySQL-Tutorial >Wie frage ich verschachtelte JSON-Arrays in PostgreSQL ab?

Wie frage ich verschachtelte JSON-Arrays in PostgreSQL ab?

DDD
DDDOriginal
2025-01-15 11:45:43988Durchsuche

How to Query Nested JSON Arrays in PostgreSQL?

Abfrage nach verschachtelten JSON-Arrays in PostgreSQL

Einleitung:

Der JSON-Datentyp von PostgreSQL bietet umfassende Datenspeicher- und Abfragefunktionen. Eine häufige Herausforderung besteht darin, in JSON-Objekten gespeicherte Arrays abzufragen. Dieser Artikel bietet eine Schritt-für-Schritt-Anleitung zum Abfragen von Array-Elementen in JSON-Typen mit Schwerpunkt auf PostgreSQL 9.3 und höher.

JSON-Arrays in PostgreSQL 9.3 und höher abfragen:

  1. json_array_elements() Funktion:

    json_array_elements() Die Funktion gibt eine horizontale Liste aller Elemente im JSON-Array zurück. Es kann mit lateralen Joins in der FROM-Klausel verwendet werden:

    <code class="language-sql">SELECT data::text, obj
    FROM   reports r, json_array_elements(r.data#>'{objects}') obj
    WHERE  obj->>'src' = 'foo.png';</code>

    Bitte beachten Sie, dass der Operator #> verwendet wird, um auf verschachtelte Objekte in einem JSON-Array zuzugreifen.

  2. Verschachtelte horizontale Verbindungen:

    Ein anderer Ansatz ist die Verwendung verschachtelter lateraler Verknüpfungen:

    <code class="language-sql">SELECT *
    FROM   reports r, json_array_elements(r.data->'objects') obj
    WHERE  obj->>'src' = 'foo.png';</code>

    Diese Abfrage verwendet implizites JOIN LATERAL und funktioniert ähnlich wie das vorherige Beispiel.

Abfragen mithilfe des GIN-Index optimieren (PostgreSQL 9.4):

Um die Abfrageleistung bei der Suche nach bestimmten Array-Elementen zu verbessern, wird empfohlen, jsonb_array_elements() zu verwenden und einen GIN-Index für den JSON-Ausdruck data->'objects' zu 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>
Der

@>-Operator prüft die Einbeziehung und erfordert, dass die JSON-Struktur in eckige Klammern eingeschlossen wird.

Zusätzliche Hinweise:

    Die Operatoren
  • ->, ->> und #> werden für den Zugriff auf verschachtelte JSON-Objekte und -Arrays verwendet.
  • Ein umfassendes Verständnis der JSON-Operatoren finden Sie in der PostgreSQL-Dokumentation.

Das obige ist der detaillierte Inhalt vonWie frage ich verschachtelte JSON-Arrays in PostgreSQL ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn