postgresql jsonb 带索引的不区分大小写的查询

postgresql jsonb case insensitive query with index

我正在寻找一种进行不区分大小写查询的方法,我在这里找到了它 (),更准确地说是这样的查询:select ... where upper(data::text)::jsonb @> upper('[{"city":"New York"}]')::jsonb

但是,我似乎找不到足够的信息来了解如何创建索引以供此类查询使用。

where data::text @> '[{"city":"New York"}]'

与 GIN 索引完美配合

CREATE INDEX i1 ON mytable USING gin(data);

但是 upper(...) 函数会触发全面扫描,代价太大。

提前致谢。

您需要索引完整的表达式:

CREATE INDEX ON tab USING gin ((upper(data::text)::jsonb));