@Melnik228

Почему не работает ограничение?

нужно задать ограничение на поле, чтобы оно могло принимать только те значения, которые начинались бы на русскую букву
вот создаю
ALTER TABLE abonents
ADD CONSTRAINT last_name_check
CHECK (last_name LIKE '[А-я]%') NOT VALID;

смотрю, что все привязалось
az0KpBZ.jpg
но ничего не работает, не дает вставить никакие строки
yhjJoAr.jpg
  • Вопрос задан
  • 62 просмотра
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
Написали, что last_name должно начинаться со строки [А-я] - так и проверяется.
melkij=> select '[A]ds' like '[A]%';
?column?
----------
t
(1 строка)


Куда вам query rewrite system, если вы регулярки от like не отличаете?
Зачем not valid лучше даже не буду спрашивать.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Victoriousya
Коллеги, человек просто перепутал синтаксис для SIMILAR TO выражений и для выражений LIKE.
корректный синтаксис
ALTER TABLE abonents
ADD CONSTRAINT last_name_check
CHECK (last_name SIMILAR TO '[А-я]%');

Хотя я приверженец обычного regexp и написал бы вот так.
ALTER TABLE abonents
ADD CONSTRAINT last_name_check
CHECK (last_name ~ '[А-я].*');
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы