19

列に格納された配列内の要素をどのように検索しjsonますか? (更新:jsonb列については、9.4 の更新された回答も参照してください。)

このような JSON ドキュメントがある場合、次のjson名前の列に保存されblobます。

{"name": "Wolf",
 "ids": [185603363281305602,185603363289694211]}

私ができるようにしたいのは次のようなものです:

SELECT * from "mytable" WHERE 185603363289694211 = ANY("blob"->'ids');

一致するすべての行を取得します。"blob"->'ids'しかし、Postgres 配列ではなく JSON 値を返すため、これは機能しません。

可能であれば、個々の ID のインデックスも作成したいと思います。

4

3 に答える 3

5

まず、配列値から JSON レイヤーを削除する->>代わりに、演算子を試してください。->

次に、クエリは次のように機能します:
新しい PostgreSQL JSON データ型内のフィールドを使用してクエリを実行するにはどうすればよいですか?

インデックスは次のように機能します: JSON 配列内の要素を検索するためのインデックス

于 2013-09-16T18:04:33.383 に答える
4

私はそれがしばらく経ったことを知っています...

postgresql-9.5 では、簡単にクエリできるようになりました。

select '{"name": "Wolf",
         "ids": [185603363281305602,185603363289694211]}'::jsonb
       @> '{"ids":[185603363281305602]}'

jsonb代わりにフィールドを使用する必要があると思います。後でインデックスを作成できます。

CREATE INDEX idx_gin_ids ON mytable USING gin ((blob -> 'ids'));
于 2015-05-13T22:34:23.687 に答える