Blu*_*lue 2 postgresql trigger stored-procedures
我想在 Postgresql 中使用触发器调用存储过程。是否可以?
这是一个例子:
create table foo(n int primary key, n1 int);
create or replace procedure set_column_value(value int)
language plpgsql
:as $$
begin
update foo
set n1 = id
commit;
end;$$
Run Code Online (Sandbox Code Playgroud)
触发器类似于:在 foo 上插入或更新后,调用存储过程 set_column_value(new.n)
不,触发器需要调用触发器函数。但是没有什么可以阻止您编写CALL
您喜欢的过程的 PL/pgSQL 触发器函数。
允许这种语法可能会令人困惑CREATE TRIGGER
:
CREATE TRIGGER ... EXECUTE { PROCEDURE | FUNCTION } ...
Run Code Online (Sandbox Code Playgroud)
然而,这是 PostgreSQL 拥有过程之前的语法遗留物。当时,唯一允许的语法是EXECUTE PROCEDURE
,尽管它调用了触发器函数。EXECUTE FUNCTION
随着过程的出现,这变得相当奇怪,因此引入了新的且现在首选的语法,但EXECUTE PROCEDURE
出于兼容性原因仍然允许使用。不过,您只能调用函数,而不能调用过程。