[英]How to speed up SELECT for a JSONB column in Postgres when the first level key is unknown?
[英]Query Postgres JSONB with traversal of nested key when first parent key is unknown
我正在嘗試使用JSONB進行查詢,但是我有一個問題,我不知道第一個鍵可能是什么。
理想情況下,我可以在查詢中使用通配符。
例如:以下作品
WHERE json_data #> '{first_key,second_key}' = '"value-of-second-key"'
但我可能不知道first_key的名稱或想要匹配任何嵌套的子鍵。 就像是。
WHERE json_data #> '{*,second_key}' = '"value-of-second-key"'
使用像'*'這樣的通配符會很理想
任何建議或方法將非常感謝。
您不能對#>
運算符使用通配符,但可以使用jsonb_each
函數來jsonb_each
JSON的第一級 :
SELECT *
FROM jsonb_each('{"foo": {"second_key": "xxx"}, "bar": {"other_second_key": "xxx"}, "baz": {"second_key": "yyy"}}') AS e(key, value)
WHERE e.value @> '{"second_key": "xxx"}';
結果:
key | value
-----+-----------------------
foo | {"second_key": "xxx"}
(1 row)
如果您只想搜索匹配它的行(而不是上面的確切json元素),您可以使用EXISTS
:
SELECT ...
FROM the_table t
WHERE EXISTS(
SELECT 1
FROM jsonb_each(t.the_jsonb_column) AS e(key, value)
WHERE e.value @> '{"second_key": "xxx"}'
)
從邏輯上講,這種方法運行正常,但要注意它無法獲得索引的優勢,因為e.value @> '{"foo": {"second_key": "xxx"}}'
,所以如果性能確實如此不過,您可能想重新考慮您的架構。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.