PostgreSQL のネストされた JSON 配列のクエリ
紹介:
PostgreSQL の JSON データ型は、包括的なデータ ストレージとクエリ機能を提供します。一般的な課題は、JSON オブジェクトに格納されている配列のクエリです。この記事では、PostgreSQL 9.3 以降に焦点を当てて、JSON 型の配列要素をクエリするためのステップバイステップのガイドを提供します。
PostgreSQL 9.3 以降での JSON 配列のクエリ:
json_array_elements() 関数:
json_array_elements()
この関数は、JSON 配列内のすべての要素の水平リストを返します。 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>
#>
演算子は、JSON 配列内のネストされたオブジェクトにアクセスするために使用されることに注意してください。
ネストされた水平結合:
もう 1 つのアプローチは、ネストされた横方向結合を使用することです。
<code class="language-sql">SELECT * FROM reports r, json_array_elements(r.data->'objects') obj WHERE obj->>'src' = 'foo.png';</code>
このクエリは暗黙的な JOIN LATERAL
を使用し、前の例と同様に動作します。
GIN インデックスを使用したクエリの最適化 (PostgreSQL 9.4):
特定の配列要素を検索する際のクエリのパフォーマンスを向上させるには、jsonb_array_elements()
を使用し、JSON 式 data->'objects'
に GIN インデックスを作成することをお勧めします。
<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>
@>
演算子は包含をチェックし、JSON 構造を角かっこで囲む必要があります。
追加メモ:
->
、->>
、#>
演算子は、ネストされた JSON オブジェクトと配列にアクセスするために使用されます。 以上がPostgreSQL でネストされた JSON 配列をクエリするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。