使用 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)
,因为这是用来建立索引的表达式
我有一个 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)
,因为这是用来建立索引的表达式