Postgresql: автоматический строчный текст во время (или до) вставки в столбец

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

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

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

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

Ответы

Ответ 1

Вам не нужен тип данных без учета регистра (хотя есть один)

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

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

Ответ 2

ALTER TABLE your_table
  ADD CONSTRAINT your_table_the_column_lowercase_ck
  CHECK (the_column = lower(the_column));

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

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