Database Postgresql-如何禁止在某些字符串字段中使用空格

Database Postgresql-如何禁止在某些字符串字段中使用空格,database,postgresql,plperl,Database,Postgresql,Plperl,我不允许在某些text/varchar字段中使用空格 更重要的是,最好只允许使用一组字符,如: [a-zA-Z0-9_\-] 我想把它作为一条规则,应用于所有VARCHAR字段,这些字段是它们表中主键的成员 这应该在数据库级别上完成,并且在尝试插入错误记录或将密钥字段更改为无效值来更新记录时可能引发异常 这可以在数据库级别内完成吗?我应该使用Pl/Perl,还是有更简单的方法?你可以定义一个域,看看底部,有一个关于美国邮政编码的例子。看到你的最新评论,你也许可以使用检查约束和正则表达式搜索?

我不允许在某些text/varchar字段中使用空格

更重要的是,最好只允许使用一组字符,如:

[a-zA-Z0-9_\-]
我想把它作为一条规则,应用于所有
VARCHAR
字段,这些字段是它们表中
主键的成员

这应该在数据库级别上完成,并且在尝试插入错误记录或将密钥字段更改为无效值来更新记录时可能引发异常


这可以在数据库级别内完成吗?我应该使用
Pl/Perl
,还是有更简单的方法?

你可以定义一个域,看看底部,有一个关于美国邮政编码的例子。

看到你的最新评论,你也许可以使用检查约束和正则表达式搜索?
但是您必须修改模式(表)并为每个字段插入它。

您甚至不需要存储过程:

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

应该可以工作。

这看起来很有希望,但它需要修改我的所有现有数据,这是相当多的表。我在考虑一种注入现有数据库的方法,这就是为什么我首先想到触发器和函数。这不需要改变所有数据,只需要改变模式。域正是为此而设计的<代码>更改表foo更改条类型my_域确定。有没有办法对N个表自动执行此操作,每个表都有1+个字段要更改?例如:对于每个表{for each field in table that a key{alter}}需要编写脚本,但是任务的键在
信息\u模式中。
查看我在“grantall”上的博客帖子:-我在那里使用的技术也可以应用于这种情况。我刚刚使用了
你的\u列!~“”