我想在varchar列中实现不区分大小写的唯一性。但是,Postgres中没有不区分大小写的文本数据类型。由于原始文本的情况并不重要,因此在插入具有UNIQUE约束的列之前将全部转换为小写/大写是一个好主意。此外,它还需要一个INDEX才能快速搜索。
Postgres有没有办法在插入之前操作数据?
我看了另外一个问题:How to automatically convert a MySQL column to lowercase。 它建议在插入/更新时使用触发器来使用小写文本或使用带有小写文本的视图。但是,没有一种建议的方法能够确保唯一性。
此外,由于这些数据将由各种应用程序读取/写入,因此在每个应用程序中小写数据并不是一个好主意。
答案 0 :(得分:27)
您不需要不区分大小写的数据类型(尽管there is one)
CREATE UNIQUE INDEX idx_lower_unique
ON your_table (lower(the_column));
这样你甚至不必乱用原始数据。
答案 1 :(得分:20)
ALTER TABLE your_table
ADD CONSTRAINT your_table_the_column_lowercase_ck
CHECK (the_column = lower(the_column));
可以考虑使用索引来强制执行唯一约束 不应直接访问的实现细节。