[英]Postgres search using lower() index
我有一个Postgres表,其中包含带有大写和小写字符的字符串的列。
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($1));
为什么Postgres不使用小写索引来匹配小写字符串?
我不想使用:...其中lower(company.department)= lower($ 1)),因为它违反了使用小写索引的目的。
我不想使用:...其中lower(company.department)= lower($ 1)),因为它违反了使用小写索引的目的。
相反,只有在查询中使用与索引中完全相同的表达式时,才使用索引。 请参阅文档中的表达式索引 。
表达方式:
where lower(company.department) = lower($1)),
不损害具有小写索引的目的。 这正是您想要拥有一个的原因。 使用索引重要的是表达式lower(company.department)
,因为这是用于构建索引的表达式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.