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 шт):

Автор решения: Akina
CREATE TABLE IF NOT EXISTS elections.voters (
  voter_id serial4,
  fname VARCHAR(30) NOT NULL CHECK (fname !~ '[^A-Z]')
  );

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

→ Ссылка
Автор решения: newman

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

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

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

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

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

→ Ссылка