将原始 大小写混合的字符串存储在纯文本列中 。使用数据类型 text
或
varchar不使用长度修饰符而不是
varchar(n)。它们本质上是相同的,但是必须使用varchar(n)设置任意长度限制,如果以后要更改,可能会很麻烦。在手册中或Peter Eisentraut @
serverfault.SE的相关答案中了解更多有关此内容的信息。
创建一个 功能独特的指数 上
lower(string)。这是这里的重点:
CREATE UNIQUE INDEX my_idx ON mytbl(lower(name));
如果尝试
INSERT使用小写形式的混合大小写名称,则会出现唯一的密钥冲突错误。
对于快速相等搜索,请使用如下查询:
SELECt * FROM mytbl WHERe lower(name) = 'foo' --'foo' is lower case, of course.
使用您在索引中使用的相同表达式(以便查询计划程序识别兼容性),这将非常快。
顺便说一句:您可能想升级到PostgreSQL的最新版本。自从8.4.2起,已经进行了许多重要的修复。更多有关官方Postgres版本控制网站的信息。



