以下是數據「莫扎特傳」子搜索時,我可以得到的一個例子: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