我是 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
感谢您对这个问题的任何想法。谢谢!