0

我创建了使用参数调用外部脚本的函数:

CREATE OR REPLACE FUNCTION foo3(text, text) RETURNS TEXT AS $$
$ip = shift;
$username = shift;
$cmd="/bin/echo -n $ip $username > /tmp/test";
return `$cmd`;
$$ LANGUAGE plperlu;

手动执行时效果很好。但是我想每次在我的表中插入新记录时调用它(传递参数是记录值):

postgres=# CREATE TRIGGER t_foo
postgres-#   BEFORE UPDATE
postgres-#   ON mapping
postgres-#   FOR EACH ROW
postgres-#   EXECUTE PROCEDURE foo3(OLD.ip, OLD.username);
ERROR:  syntax error at or near "."
LINE 5:   EXECUTE PROCEDURE foo3(OLD.ip, OLD.username);
                                ^

显然我不能将任何参数传递给该函数。如何解决?

4

1 回答 1

1

如手册中所述

触发器函数必须声明为不带参数并返回类型触发器的函数。

您的函数既没有声明为returns trigger也没有“无参数”。

您需要创建一个触发函数来调用您的函数:

create function foo_trigger_func()
  returns trigger
as
$$
begin
  perform foo3(old.ip, old.username);
end;
$$
language plpgsql;

然后使用该函数创建触发器:

CREATE TRIGGER t_foo
  BEFORE UPDATE ON mapping
   FOR EACH ROW
   EXECUTE PROCEDURE foo_trigger_func();
于 2018-09-07T11:52:54.103 回答