Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Menanyakan Tatasusunan JSON Bersarang dalam PostgreSQL?

Bagaimana untuk Menanyakan Tatasusunan JSON Bersarang dalam PostgreSQL?

DDD
Lepaskan: 2025-01-15 11:45:43
asal
985 orang telah melayarinya

How to Query Nested JSON Arrays in PostgreSQL?

Pertanyaan untuk tatasusunan JSON bersarang dalam PostgreSQL

Pengenalan:

Jenis data JSON PostgreSQL menyediakan storan data dan fungsi pertanyaan yang komprehensif. Cabaran biasa ialah menanyakan tatasusunan yang disimpan dalam objek JSON. Artikel ini menyediakan panduan langkah demi langkah untuk menanyakan elemen tatasusunan dalam jenis JSON, memfokuskan pada PostgreSQL 9.3 dan ke atas.

Menyiasat tatasusunan JSON dalam PostgreSQL 9.3 dan ke atas:

  1. json_array_elements() fungsi:

    json_array_elements() Fungsi mengembalikan senarai mendatar semua elemen dalam tatasusunan JSON. Ia boleh digunakan dengan cantuman sisi dalam klausa FROM:

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

    Sila ambil perhatian bahawa pengendali #> digunakan untuk mengakses objek bersarang dalam tatasusunan JSON.

  2. Gabungan mendatar bersarang:

    Alternatifnya ialah menggunakan cantuman sisi bersarang:

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

    Pertanyaan ini menggunakan JOIN LATERAL tersirat dan beroperasi sama seperti contoh sebelumnya.

Optimumkan pertanyaan menggunakan indeks GIN (PostgreSQL 9.4):

Untuk meningkatkan prestasi pertanyaan apabila mencari elemen tatasusunan tertentu, adalah disyorkan untuk menggunakan jsonb_array_elements() dan mencipta indeks GIN pada ungkapan JSON data->'objects':

<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>
Salin selepas log masuk
Pengendali

@> menyemak kemasukan dan memerlukan struktur JSON disertakan dalam kurungan segi empat sama.

Nota tambahan:

    Pengendali
  • ->, ->> dan #> digunakan untuk mengakses objek dan tatasusunan JSON bersarang.
  • Untuk pemahaman menyeluruh tentang pengendali JSON, lihat dokumentasi PostgreSQL.

Atas ialah kandungan terperinci Bagaimana untuk Menanyakan Tatasusunan JSON Bersarang dalam PostgreSQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan