以下是数据“莫扎特传”子搜索时,我可以得到的一个例子:Postgresql索引小写(列)不能按预期工作?
db=# SELECT entidade FROM gma WHERE entidade ILIKE '%amadeus%';
entidade
---------------------------------
Hairdresser Amadeus
Snack-Bar Amadeus
Restaurant Amadeus
Restaurant Amadeus
Restaurant Amadeus
Amadeus - Musical Instruments
(6 rows)
不过,我希望能够通过LIKE
更换ILIKE
。于是,我就指数entidade
只用小写字母:
db=# CREATE INDEX idx_gma_entidade ON gma USING btree
db-# (lower(entidade));
CREATE INDEX
现在我期待用LIKE
访问相同的数据:
db=# SELECT entidade FROM gma WHERE entidade LIKE '%amadeus%';
entidade
----------
(0 rows)
但是,正如你所看到的,结果是不是我所期望的... 有人可以解释为什么吗?而且,如果可能的话,我怎样才能达到预期的行为?
谢谢a_horse_with_no_name但是...请你也解释一下在创建索引时允许表达式的意义是什么?这些表达式是如何使用的?如果我运行`SELECT entidade FROM gma WHERE entidade LIKE'amadeus%'`我会使用小写索引吗? – acm 2011-02-14 13:58:57