ホームページ > データベース > mysql チュートリアル > PostgreSQL でネストされた JSON 配列をクエリするにはどうすればよいですか?

PostgreSQL でネストされた JSON 配列をクエリするにはどうすればよいですか?

DDD
リリース: 2025-01-15 11:45:43
オリジナル
986 人が閲覧しました

How to Query Nested JSON Arrays in PostgreSQL?

PostgreSQL のネストされた JSON 配列のクエリ

紹介:

PostgreSQL の JSON データ型は、包括的なデータ ストレージとクエリ機能を提供します。一般的な課題は、JSON オブジェクトに格納されている配列のクエリです。この記事では、PostgreSQL 9.3 以降に焦点を当てて、JSON 型の配列要素をクエリするためのステップバイステップのガイドを提供します。

PostgreSQL 9.3 以降での JSON 配列のクエリ:

  1. 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 配列内のネストされたオブジェクトにアクセスするために使用されることに注意してください。

  2. ネストされた水平結合:

    もう 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 オブジェクトと配列にアクセスするために使用されます。
  • JSON 演算子の包括的な理解については、PostgreSQL のドキュメントを参照してください。

以上がPostgreSQL でネストされた JSON 配列をクエリするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート