Postgres: check constraint только буквы
Подскажите, пожалуйста, как написать CHECK для column при создании таблицы так, чтобы там могли быть только англ буквы (заглавные и строчные)?
CREATE TABLE IF NOT EXISTS elections.voters
(
voter_id serial4,
fname VARCHAR(30) NOT NULL CHECK (fname ~ ‘^[A-Z].*$)
~ ‘^[A-Z].*$) - неверное решение.
Как правильно написать? Спасибо!
Ответы (2 шт):
CREATE TABLE IF NOT EXISTS elections.voters (
voter_id serial4,
fname VARCHAR(30) NOT NULL CHECK (fname !~ '[^A-Z]')
);
Если надо без учёта регистра - то соответственно !~*.
Проблема и с синтаксисом и с кавычками, да и регулярное выражение какое-то не очень корректное.
Вот такой вариант рабочий
fname VARCHAR(30) NOT NULL CHECK (fname ~* '^[A-Z]*$')
В регулярном выражении указывается что оно может содержать только буквы от A до Z. Указание ~* говорит о том что сравнение нужно делать без учета регистра букв. Т.е. проверку будут проходить символы в верхнем и нижнем регистре.
Если нужно добавить еще какие-то символы в разрешеные - то можно просто изменить регулярное выражение.