Postgresql: автоматический текст в нижнем регистре при вставке (или перед) в столбец - PullRequest
16 голосов
/ 28 января 2012

Я хочу достичь уникальности без учета регистра в столбце varchar.Но в Postgres не существует нечувствительного к регистру типа текстовых данных.Поскольку исходный регистр текста не важен, будет хорошей идеей преобразовать все в строчные / прописные буквы перед вставкой в ​​столбец с ограничением UNIQUE.Кроме того, для быстрого поиска потребуется один ИНДЕКС.

Есть ли в Postgres какой-либо способ манипулировать данными перед вставкой?

Я смотрел на другой вопрос: Как автоматически преобразоватьMySQL столбец в нижний регистр .Он предлагает использовать триггеры при вставке / обновлении в нижний регистр текста или использовать представления с нижним регистром текста.Но ни один из предложенных методов не обеспечивает уникальности.

Кроме того, поскольку эти данные будут считываться / записываться различными приложениями, использование строчных букв в каждом отдельном приложении не является хорошей идеей.

Ответы [ 2 ]

27 голосов
/ 28 января 2012

Вам не нужен нечувствительный к регистру тип данных (хотя есть один )

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

Таким образом, вам даже не придется возиться с оригинальными данными.

20 голосов
/ 11 октября 2013
ALTER TABLE your_table
  ADD CONSTRAINT your_table_the_column_lowercase_ck
  CHECK (the_column = lower(the_column));

Из руководства :

Использование индексов для реализации уникальных ограничений может рассматриваться как деталь реализации, к которой нельзя обращаться напрямую.

...