Postgresql - как запретить использование пробелов в некоторых строковых полях

Я хочу запретить использование пробелов в некоторых полях text/varchar.

Более того, было бы лучше иметь только набор символов, которые можно использовать там, например:

[a-zA-Z0-9_\-]

И я хочу сделать это как правило для всех VARCHAR поля, которые являются членами primary key в своих таблицах.

Это должно быть сделано на уровне базы данных и может вызвать исключение при попытке вставить неправильную запись или обновить ее с изменением ключевого поля на недопустимое значение.

Можно ли это сделать на уровне базы данных? Должен ли я использовать Pl/Perl для этого или есть какой-то более простой метод?

3 ответа

Решение

Вам даже не нужны хранимые процедуры:

alter table xxx add constraint check_valid_chars check ( your_column ~ '^[a-zA-Z0-9_\-]+$' );

должно сработать.

Вы можете определить домен, посмотрите на http://www.postgresql.org/docs/current/interactive/sql-createdomain.html внизу, есть пример с почтовым индексом США.

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

Другие вопросы по тегам