Chciałbym dodać ograniczenie, które wymusza unikalność kolumny tylko w części tabeli.
ALTER TABLE stop ADD CONSTRAINT myc UNIQUE (col_a) WHERE (col_b is null);
Powyższa WHERE
część to myślenie życzeniowe.
Jakiś sposób to zrobić? A może powinienem wrócić do relacyjnej deski kreślarskiej?
postgresql
constraints
unique-constraint
EoghanM
źródło
źródło
Odpowiedzi:
PostgreSQL nie definiuje częściową (tj warunkowa)
UNIQUE
ograniczający - jednak użytkownik może tworzyć częściową unikalny indeks . PostgreSQL używa unikalnych indeksów do implementacji unikalnych ograniczeń, więc efekt jest taki sam, po prostu nie zobaczysz ograniczenia wymienionego winformation_schema
.Zobacz indeksy częściowe .
źródło
ERROR: duplicate key value violates unique constraint "stop_myc"
zostało już powiedziane, że PG nie definiuje częściowego (tj. warunkowego) ograniczenia UNIQUE. Dokumentacja mówi również, że preferowanym sposobem dodania unikalnego ograniczenia do tabeli są
ADD CONSTRAINT
unikalne indeksyIstnieje sposób na wdrożenie go za pomocą ograniczeń wykluczania (dziękuję @dukelion za to rozwiązanie)
W twoim przypadku tak będzie wyglądać
źródło