如何在Postgres 9.4 JSONB列中执行不区分大小写的搜索?

6

我正在使用这个查询来查找一个表中的数据,其中profile是一个JSONB列,它可以正常工作,但只有当名称完全匹配时才能起作用。

SELECT * FROM "users" WHERE "profile" @> '{"name":"Super User"}'

是否有更多的灵活性,例如大小写不敏感、通配符等?

类似于"Super%""超级用户"这样的内容。


1
要做到这一点,我们需要类似于JSON查询语言的东西。没有内置的东西,但有些人正在开发JSON查询语言扩展。我现在找不到参考资料,但它曾在2014年的PGConf EU马德里会议上讨论过;也许可以查看会议议程列表。 - Craig Ringer
1
你是指 https://github.com/akorotkov/jsquery 吗?我会尝试一下。 - G3z
没错,就是那一个。看起来挺有意思的。不过我不知道它的稳定性/成熟度/文档等方面怎么样。 - Craig Ringer
1个回答

12

我找到了解决我的问题的方法:

SELECT * FROM "users" WHERE (profile #>> '{name}') ILIKE 'super %'

我不确定这个表现得足够好,但它能用。
可能最好给它加上一个索引。


在这种情况下,什么样的索引是有意义的?我理解GIN只能加速包含/存在于键中的查询。 - Tarlen
2
太棒了,伙计!这对我来说非常有效!对于其他任何遇到嵌套对象遍历问题的人,只需使用:profile #>> '{fullname, firstname,...}'。在这里,您的对象将类似于:{fullname: {firstname: 'abc'}} - Shyam Kansagra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接