【发布时间】:2012-09-29 05:23:18
【问题描述】:
所以,我认为这应该相当简单,但文档使它看起来有点复杂。我在 PostgreSQL(目前是 8.1)中编写了一个 SQL 函数,它对一些字符串输入进行了一些清理。值得一提的是,该字符串是一个 LDAP 专有名称,我希望逗号后始终没有空格 - 函数是 clean_dn(),它返回清理后的 DN。我想做同样的事情来强制对另外几列的所有输入为小写,等等——一旦我弄清楚这部分,这应该很容易。
无论如何,只要有人尝试插入或更新和修改该列,我希望此函数在表的“dn”列上运行。但是我能找到的所有规则示例似乎都假设所有插入/更新查询都会一直修改表中的所有列。在我的情况下,情况并非如此。我认为我真正想要的是一个仅更改值而不是返回 true 或 false 的约束,但这对于约束的 SQL 概念似乎没有意义。我是否让我的规则对新表执行更新?我是否必须为每个可能的新值组合创建一个新规则?如果我添加一个列,我是否必须检查并更新我的所有规则组合以反映每个可能的新列组合?
必须有一个简单的方法......
【问题讨论】:
-
是的,我知道我可以在客户端进行验证。如果数据库只能定义一次规则,那么在我触及这个值的每个地方重复代码是愚蠢的.. :)
-
你也许可以做一些像
ALTER TABLE table_name ADD CONSTRAINT constraint_name CHECK (clean_dn(dn) = dn)这样简单的事情
标签: postgresql validation plpgsql sanitization postgresql-8.1