Привет я не могу получить ограничение работает так, как я ожидаю в PostgreSQL. Изнутри pgadmin я выполняю следующий 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';
При выполнении это преобразуется в.
-- 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';
Я ожидаю, что это ограничит мой ввод для столбца Types одним из IRL сообщения электронной почты или минут. Однако при вводе данных таблицы это ограничение не выполняется, когда я ввожу один из этих типов. Столбец Типы имеет тип символа. Кто-нибудь знает, как это исправить. Спасибо.
postgresql
constraint
wookie1
источник
источник
CHECK (type in ('email','post','IRL','minutes')
?Ответы:
Измените ваше ограничение на
Это будет преобразовано парсером в:
Это должно делать то, что вы смотрите.
Однако мне интересно, не лучше ли это сделать:
А затем добавьте внешний ключ, чтобы применить ограничение. Это облегчит добавление типов в будущем.
источник