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:
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>
Sila ambil perhatian bahawa pengendali #>
digunakan untuk mengakses objek bersarang dalam tatasusunan JSON.
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>
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>
@>
menyemak kemasukan dan memerlukan struktur JSON disertakan dalam kurungan segi empat sama.
Nota tambahan:
->
, ->>
dan #>
digunakan untuk mengakses objek dan tatasusunan JSON bersarang. 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!