PSQL不区分大小写INDEX lower()不起作用

时间:2017-08-16 10:33:31

标签: postgresql indexing constraints case-insensitive

目前,我正在编写一个列中的数据," filename",在搜索或比较它们时不区分大小写。 在 files DB中,我有名为SAMPLE.txt和sAMple.Txt的文件。 ... 我想在执行

时获取所有这些具有相同名称的文件
SELECT * from files where filename='sample.txt'

所以,我用这个命令做了一个索引......

CREATE INDEX files_lower_fnames_idx ON files ((lower(filename)));

它已成功创建。 但在执行......

SELECT * from files where filename='sample.txt'

它仍然返回0行。

我错过了什么吗? 谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

  

它仍然返回0行。

创建索引对查询结果无影响,只有查询的性能。如果它在创建索引之前返回0行,那么它也应该在它之后。

我不能肯定为什么它返回0行,因为你没有在表格中显示数据。但如果按照你的描述那么

SELECT * from files where filename='sample.txt'

不符合它。您需要citext列,或者执行不区分大小写的查询,例如

SELECT * from files where lower(filename)='sample.txt'

此查询应该能够使用您创建的索引更快地运行。

相关问题