0

我是 postgres jsonb 操作的新手。我使用 jsonb 列在 Postgres 中存储一些数据,该列具有如下灵活的元数据。我想搜索不同的唯一元数据(键:值对)

id, type, metadata
1, player, {"name": "john", "height": 180, "team": "xyz"}
2, game,   {"name": "afl", "members": 10, "team": "xyz"}

结果应该如下所示,不同的,按升序排列。我希望它使用一些索引是有效的。

key    | value
______________
height   180
members  10
name     alf
name     john
team     xyz

我下面的解决方案命中了搜索索引,但排序和 distinct 不会命中任何索引,因为它们是来自 jsonb 的处理值。

CREATE INDEX metadata_jsonb_each_text_idx ON table
USING GIN (jsonb_pretty(metadata) gin_trgm_ops);

select distinct t, t.* 
from table u, jsonb_each_text(u.metadata) t 
where jsonb_pretty(u.metadata) like '%key%' 
order by t.key, t.value

感谢您对这个问题的任何想法。谢谢!

4

0 回答 0