Postgresql - как запретить использование пробелов в некоторых строковых полях - PullRequest
2 голосов
/ 05 января 2010

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

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

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

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

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

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

Ответы [ 3 ]

5 голосов
/ 05 января 2010

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

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

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

4 голосов
/ 05 января 2010

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

0 голосов
/ 05 января 2010

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

...