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_column
ale 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?