使用 lower() 索引的 Postgres 搜索

Postgres search using lower() index

我有一个 Postgres table 包含带有大写和小写字符字符串的列。

Table: company
id| name    | department
------------------------
1 | LM Corp | Repair
2 | BMG Inc | Maintenance
3 | DFR LLC | shipping

我使用 pgAdmin 在列上创建了一个索引,如下所示:

CREATE INDEX companydepartment_index
ON public.company (lower(department) ASC NULLS LAST);

当我查询输入字符串为小写 'repair' 时,我没有得到匹配项。

select company.id from company where company.department = lower());

为什么 Postgres 不使用小写索引来匹配小写字符串?

我不想使用:...where lower(company.department) = lower($1)),因为它违背了小写索引的目的。

I don't want to use: ...where lower(company.department) = lower()), because it defeats the purpose of having a lowercase index.

相反,只有在查询中使用与索引中完全相同的表达式时,才会使用索引。请参阅文档中的 Indexes on Expressions

表达式:

where lower(company.department) = lower()),

不是 破坏了小写索引的目的。 正是您想拥有一个的原因。使用索引重要的是表达式lower(company.department),因为这是用来建立索引的表达式