Sco*_*tie 5 postgresql constraint
是否可以在 Postgres 中创建一个约束来运行函数,但前提是特定列发生更改?
现在,我有这个:
ALTER TABLE public.employee
ADD CONSTRAINT pin_is_unique_in_company CHECK
(fn_pin_is_unique_in_company(id, company_id, pin));
Run Code Online (Sandbox Code Playgroud)
我只希望在 pin 列被修改时运行。
CHECK
约束应始终评估为相同的结果。如果您的函数被声明IMMUTABLE
为完美的候选者,否则这里还有更多需要讨论的内容。约束NOT VALID
可能是一种选择。考虑:
然而,CHECK
约束是无条件运行的。如果您只想在特定列发生更改时运行检查,则需要不同的工具。一个明显的候选者就是触发器,就像 @a_vlad 评论的那样:
CREATE TRIGGER employee_upbef
BEFORE UPDATE OF pin ON public.employee
FOR EACH ROW EXECUTE PROCEDURE fn_pin_is_unique_in_company();
Run Code Online (Sandbox Code Playgroud)
在 Postgres 9.1 或更高版本中,您可以将触发器限制为特定列的更改。
但是,您不能将每行参数传递给触发器函数。相反,引用触发函数内的特殊行变量...NEW
相关示例:
但是,您尝试做的事情听起来像是多列UNIQUE
约束的情况。没有足够的信息可以说明。
归档时间: |
|
查看次数: |
5807 次 |
最近记录: |