24

我想在 varchar 列中实现不区分大小写的唯一性。但是,Postgres 中没有不区分大小写的文本数据类型。由于文本的原始大小写并不重要,因此在插入具有 UNIQUE 约束的列之前,最好将全部转换为小写/大写。此外,它还需要一个索引来进行快速搜索。

Postgres 中有什么方法可以在插入之前操作数据吗?

我看了另一个问题:如何自动将 MySQL 列转换为小写。它建议在插入/更新小写文本时使用触发器或使用带有小写文本的视图。但是,建议的方法都不能确保唯一性。

此外,由于这些数据将被各种应用程序读取/写入,因此在每个单独的应用程序中小写数据并不是一个好主意。

4

2 回答 2

39

您不需要不区分大小写的数据类型(尽管有一个

CREATE UNIQUE INDEX idx_lower_unique 
   ON your_table (lower(the_column));

这样,您甚至不必弄乱原始数据。

于 2012-01-28T16:28:27.200 回答
39
ALTER TABLE your_table
  ADD CONSTRAINT your_table_the_column_lowercase_ck
  CHECK (the_column = lower(the_column));

从手册

使用索引来强制执行唯一约束可以被认为是不应该直接访问的实现细节。

于 2013-10-11T11:34:38.023 回答