Postgres: check constraint только буквы

Рейтинг: 1Ответов: 2Опубликовано: 02.02.2023

Подскажите, пожалуйста, как написать CHECK для column при создании таблицы так, чтобы там могли быть только англ буквы (заглавные и строчные)?

CREATE TABLE IF NOT EXISTS elections.voters
(
voter_id serial4,
fname VARCHAR(30) NOT NULL CHECK (fname ~ ‘^[A-Z].*$)

~ ‘^[A-Z].*$) - неверное решение. Как правильно написать? Спасибо!

Ответы

▲ 1Принят

Проблема и с синтаксисом и с кавычками, да и регулярное выражение какое-то не очень корректное.

Вот такой вариант рабочий

fname VARCHAR(30) NOT NULL CHECK (fname ~* '^[A-Z]*$')

В регулярном выражении указывается что оно может содержать только буквы от A до Z. Указание ~* говорит о том что сравнение нужно делать без учета регистра букв. Т.е. проверку будут проходить символы в верхнем и нижнем регистре.

Если нужно добавить еще какие-то символы в разрешеные - то можно просто изменить регулярное выражение.

▲ 0
CREATE TABLE IF NOT EXISTS elections.voters (
  voter_id serial4,
  fname VARCHAR(30) NOT NULL CHECK (fname !~ '[^A-Z]')
  );

Если надо без учёта регистра - то соответственно !~*.