ホームページ >データベース >mysql チュートリアル >PostgreSQL で JSON 配列要素の一致をクエリする方法は?

PostgreSQL で JSON 配列要素の一致をクエリする方法は?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-15 10:49:43204ブラウズ

How to Query for JSON Array Element Matches in PostgreSQL?

PostgreSQL で一致する JSON 配列要素をクエリします

PostgreSQL の JSON データ型は、ネストされた配列内の特定の要素をクエリする場合に扱いにくい場合があります。次の例を考えてみましょう:

<code>{
  "objects": [{"src":"foo.png"},
{"src":"bar.png"}],
  "background":"background.png"
}</code>

「src」値が「objects」配列内の「foo.png」と一致するレコードをクエリするには、FROM 句で横結合を使用できます。

PostgreSQL 9.3 以降

PostgreSQL 9.3 以降の場合は、json_array_elements() 関数を使用して「objects」配列を展開し、各要素をテストします。

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

PostgreSQL 9.4 以降

PostgreSQL 9.4 以降では、jsonb_array_elements() 関数を使用して、式に一致する 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>

配列のマッチングでは要素を角括弧で囲む必要がありますが、通常のオブジェクトのマッチングでは角括弧は必要ないことに注意してください。詳細と回避策については、質問に記載されているリンク先のドキュメントとその他のリソースを参照してください。

以上がPostgreSQL で JSON 配列要素の一致をクエリする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。