使用索引在数据库中进行不区分大小写的搜索?

Wil*_*nes 4 database postgresql search case-insensitive

我正在使用Postgres.

我的数据库中有一个Artices表,其中包含url slugs的列url.这些是我可以在网站上显示该表中的文章而不是" example.com/23323"而是" example.com/Funny_Thing_Happened_to_Me".这很容易实现,然后随着文章数量的增长,我在url slugs上添加了一个索引.

我已经意识到虽然我希望能够在网址中显示大写字母,但我希望它们在用户键入的内容中不区分大小写,并且我希望以不区分大小写的方式强制网址上的唯一性.

是否有一种直接的方式来快速搜索基于文本列的不区分大小写的方式,并以不区分大小写的方式强制执行唯一性?

我尝试用类似的东西进行搜索,lower(url) =但这导致Postgres决定不使用索引.

rfu*_*sca 7

使用功能索引:

CREATE UNIQUE INDEX ix_test1 on articles (lower(url));
Run Code Online (Sandbox Code Playgroud)

如果您使用的是8.4并且可以安装contrib模块,那么还要查看citext类型.它抽象出所有较低/ UPPER的东西,并且表现稍好一些.