Ответ 1
Вам не нужен тип данных без учета регистра (хотя есть один)
CREATE UNIQUE INDEX idx_lower_unique
ON your_table (lower(the_column));
Таким образом, вам даже не нужно возиться с исходными данными.
Я хочу, чтобы в столбце varchar была сделана нечувствительность к регистру. Но в Postgres нет типа данных, нечувствительных к регистру. Поскольку исходный текст не имеет значения, будет хорошей идеей преобразовать все в нижний регистр или в верхний регистр перед вставкой в столбец с ограничением UNIQUE. Кроме того, для быстрого поиска потребуется один INDEX.
Есть ли способ в Postgres для управления данными перед вставкой?
Я посмотрел на этот другой вопрос: Как автоматически преобразовать столбец MySQL в нижний регистр. Он предлагает использовать триггеры для вставки/обновления в строчный текст или использовать представления с текстом с нижним регистром. Но ни один из предложенных методов не гарантирует уникальность.
Кроме того, поскольку эти данные будут считываться/записываться различными приложениями, более низкие данные в каждом отдельном приложении не являются хорошей идеей.
Вам не нужен тип данных без учета регистра (хотя есть один)
CREATE UNIQUE INDEX idx_lower_unique
ON your_table (lower(the_column));
Таким образом, вам даже не нужно возиться с исходными данными.
ALTER TABLE your_table
ADD CONSTRAINT your_table_the_column_lowercase_ck
CHECK (the_column = lower(the_column));
Можно использовать использование индексов для обеспечения уникальных ограничений детали реализации, к которым не следует обращаться напрямую.