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 и поиск регулярных выражений? Но вам придется изменить схему (таблицы) и вставить ее для каждого поля.