Cześć Nie mogę uzyskać ograniczenia działającego tak, jak się spodziewam w postgreSQL. Z poziomu pgadmin wykonuję następujące zapytanie SQL.
-- Check: "TypeCheck"
-- ALTER TABLE "ComLog" DROP CONSTRAINT "TypeCheck";
ALTER TABLE "ComLog"
ADD CONSTRAINT "TypeCheck" CHECK ("Type" SIMILAR TO 'email|post|IRL|minutes');
COMMENT ON CONSTRAINT "TypeCheck" ON "ComLog" IS 'One of email|post|IRL|minutes';
Po wykonaniu jest to konwertowane na.
-- Check: "TypeCheck"
-- ALTER TABLE "ComLog" DROP CONSTRAINT "TypeCheck";
ALTER TABLE "ComLog"
ADD CONSTRAINT "TypeCheck" CHECK ("Type" ~ similar_escape('email|post|IRL|minutes'::text, NULL::text));
COMMENT ON CONSTRAINT "TypeCheck" ON "ComLog" IS 'One of email|post|IRL|minutes';
Oczekuję, że ograniczy to mój wkład do kolumny Typy do jednego z IRL postu e-mail lub minut. Jednak podczas wprowadzania danych tabeli to ograniczenie nie działa, gdy wprowadzam jeden z tych typów. Kolumna Typy ma charakter znakowy. Czy ktoś wie, jak to naprawić. Dzięki.
postgresql
constraint
wookie1
źródło
źródło
CHECK (type in ('email','post','IRL','minutes')
?Odpowiedzi:
Zmień swoje ograniczenie na
Zostanie to przekonwertowane przez parser na:
To powinno zrobić to, na co patrzysz.
Jednak muszę się zastanawiać, czy nie byłoby lepiej to zrobić:
A następnie dodaj klucz obcy, aby wymusić ograniczenie. Ułatwi to dodawanie typów w przyszłości.
źródło