Postgresql:插入列时(或之前)自动小写文本

时间:2012-01-28 16:27:13

标签: postgresql postgresql-9.1

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

Postgres有没有办法在插入之前操作数据?

我看了另外一个问题:How to automatically convert a MySQL column to lowercase。 它建议在插入/更新时使用触发器来使用小写文本或使用带有小写文本的视图。但是,没有一种建议的方法能够确保唯一性。

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

2 个答案:

答案 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));

From the manual

  

可以考虑使用索引来强制执行唯一约束   不应直接访问的实现细节。