Odroczone, nieuwzględniające wielkości liter unikalne ograniczenie

Czy w PostgreSQL jest możliwe utworzenie odroczonego ograniczenia unikatowego w kolumnie znaku, ale nie rozróżnia wielkości liter?

Załóżmy następującą tabelę podstawową:

CREATE TABLE sample_table ( 
   my_column VARCHAR(100)
);

Jeśli ograniczenie odroczenia nie jest potrzebne, jest to tak proste, jak utworzenie unikalnego indeksu z funkcją, np .:

CREATE UNIQUE INDEX my_unique_index ON sample_table(UPPER(my_column));

Odroczona kontrola ograniczeń wymaga jawnego utworzenia ograniczenia, np .:

ALTER TABLE sample_table 
 ADD CONSTRAINT my_unique_constraint UNIQUE(my_column)
 DEFERRABLE INITIALLY IMMEDIATE;

I niestety nie jest możliwe użycie dowolnych funkcji w unikalnym ograniczeniu.

Jednym z możliwych obejść byłoby utworzenie dodatkowej kolumny o takiej samej treści jakmy_columnale wielkie litery, aktualizowane za pomocą wyzwalacza po każdej aktualizacji / wstawieniu, a następnie utwórz unikalne ograniczenie unikalne w tej sztucznej kolumnie. To jednak brzmi jak naprawdę brzydki hack.

Alternatywnie powinno być możliwe użycieCREATE CONSTRAINT TRIGGER i ręcznie sprawdzaj wyjątkowość bez rozróżniania wielkości liter (oczywiście konieczny byłby regularny indeks). Brzmi to trochę zbyt skomplikowanie dla tak prostego (i chyba popularnego) wymagania.

Czy istnieje jakieś prostsze i / lub bardziej eleganckie podejście do tego ograniczenia?

questionAnswers(1)

yourAnswerToTheQuestion