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

use*_*616 16 postgresql postgresql-9.1

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

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

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

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

a_h*_*ame 29

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

CREATE UNIQUE INDEX idx_lower_unique 
   ON your_table (lower(the_column));
Run Code Online (Sandbox Code Playgroud)

这样你甚至不必乱用原始数据.

  • 这仍然允许您插入大写字母,因此不应将其标记为答案。 (4认同)

Cra*_*ner 20

ALTER TABLE your_table
  ADD CONSTRAINT your_table_the_column_lowercase_ck
  CHECK (the_column = lower(the_column));
Run Code Online (Sandbox Code Playgroud)

从手册:

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

  • 我使用了这个,因为我可以让我的应用程序处理以正确的小写格式输入数据,同时使用DB来处理它的好处 - 完整性检查. (3认同)

归档时间:

查看次数:

9900 次

最近记录:

12 年,4 月 前