2017-03-28 2 views
0

表にmetadataというJSONB列があります。このようなクエリを実行するためのより効率的な方法がありますJSONB列のOR演算子を使用した問合せ

SELECT * FROM users 
WHERE metadata @> '{"a": {"b": 5}}' 
    OR metadata @> '{"a": {"b": 6}}' 
    OR metadata @> '{"a": {"b": 7}}'; --etc. 

:私はこのような何かを行うことができますmetadata->a->bが5であるユーザー、6、または7を取得したいですか? JSONBにはINのようなものがありますか?

+0

'(メタデータ - > '' - > 'B')::のint(5 、6,7) 'は動作しませんか? –

答えて

1
... WHERE metadata->'a'->>'b' IN (5, 6, 7) 

あなたが式にB-treeインデックスを作成することができかもしれないヘルプ:

CREATE INDEX ON users ((metadata->'a'->>'b')); 
+0

ありがとう。あなたのサイドノートについては、どのようなインデックスを作成する必要がありますか? GINインデックスはJSONB列全体のインデックスですが、私は "クラシック"インデックスを作成する必要がありますか? –

+0

私はそれをカバーする答えを広げました。 –

+0

ありがとう!それは動作します(そして今は超高速です) –

関連する問題