2012-01-28 15 views
15

Chcę uzyskać unikalną wielkość liter w kolumnie varchar. Ale w Postgresie nie ma typu danych tekstowych niewrażliwych na wielkość liter. Ponieważ oryginalny przypadek tekstu nie jest ważny, dobrze jest przekonwertować wszystkie na małe/wielkie litery przed wstawieniem do kolumny z ograniczeniem UNIQUE. Ponadto będzie wymagać jednego INDEX do szybkiego wyszukiwania.Postgresql: tekst pisany małymi literami podczas (lub wcześniejszego) wstawiania do kolumny

Czy w Postgres jest jakiś sposób manipulowania danymi przed wstawieniem?

Spojrzałem na to inne pytanie: How to automatically convert a MySQL column to lowercase. Sugeruje użycie wyzwalaczy przy wstawianiu/aktualizacji do tekstu pisanego małymi literami lub używania widoków z tekstem pisanym małymi literami. Jednak żadna z sugerowanych metod nie zapewnia wyjątkowości.

Ponadto, ponieważ dane te będą odczytywane/zapisywane przez różne aplikacje, obniżenie danych w każdej indywidualnej aplikacji nie jest dobrym pomysłem.

+5

Żadna z bieżących odpowiedzi nie będzie faktycznie zawierała małych liter przed wstawieniem, czyli o to, co jest zadawane. Zobacz http://stackoverflow.com/questions/18807709/create-a-postgres-rule-l-trigger-to-automatically-convert-a-column-to-lowercase. –

Odpowiedz

25

Nie musisz typ danych bez uwzględniania wielkości liter (choć there is one)

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

W ten sposób nie trzeba nawet poeksperymentować z oryginalnymi danymi.

+0

Zweryfikowany, działa dokładnie tak, jak chciałem. Przechowuje dane uwzględniające wielkość liter (które nie były wymagane, ale dobrze je mieć), ale wymusza unikalność nierozróżniania wielkości liter. – user1144616

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

From the manual:

Stosowanie indeksów egzekwowania unikalnych ograniczeń można uznać szczegółów wdrażania, które nie powinny być dostępne bezpośrednio.

+3

Użyłem tego, ponieważ mogę pozwolić mojej aplikacji obsługiwać wprowadzanie danych w prawidłowym formacie małych liter, podczas korzystania z DB, co to jest dobre dla - sprawdzanie integralności. –

Powiązane problemy