PostgreSQL の JSON 配列のクエリ要素
はじめに
SQL は、JSON データのストレージを効果的に処理できます。この記事では、PostgreSQL の JSON オブジェクトに格納されている配列をクエリする方法に焦点を当てます。
JSON ネスト配列のクエリ
「data」という名前の JSON 列にオブジェクトの配列が含まれているとします。このタスクは、「objects」配列から特定の「src」値に一致するすべてのレコードを取得することです。
横結合とネスト解除を使用したクエリ
Postgres は、JSON 配列を展開するための json_array_elements() 関数を提供します。これを横結合と組み合わせることで、望ましい結果を得ることができます:
<code class="language-sql">SELECT * FROM reports r, json_array_elements(r.data->'objects') obj WHERE obj->>'src' = 'foo.png';</code>
このクエリは、JSON 配列要素ごとに横結合を作成し、列 obj が配列内の各オブジェクトを表すことができるようにします。
PostgreSQL 9.4 の代替手段
PostgreSQL 9.4 以降では、改善された JSON 処理を利用できます。
<code class="language-sql">SELECT * FROM reports WHERE data->'objects' @> '[{"src":"foo.png"}]';</code>
このクエリでは、「@>」演算子は、配列に指定されたオブジェクトが含まれているかどうかを確認します。 JSON 配列構造と一致させるために、検索語を角括弧で囲むことを忘れないでください。
概要
JSON 型で配列をクエリするには、 json_array_elements() を使用して配列を展開し、横結合を実行します。 PostgreSQL 9.4 以降では、強化された「@>」演算子を照合 GIN インデックスとともに使用して、効率的な照合を行うことができます。どちらのメソッドでも、配列要素の値に基づいて特定のレコードを取得できます。
以上がPostgreSQL で JSON 配列内の要素をクエリするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。