创建触发器时在FUNCTION或附近的PostgreSQL语法错误

时间:2019-08-08 23:17:04

标签: postgresql database-trigger

我在运行Ubuntu服务器18.04的新计算机上安装了postgresql和postgresql-plpython-10(使用apt) 并且我已经将Postgresql数据库(使用pg_dumpall提取)从另一台机器恢复到新机器(Linux)。

我检查了数据库中是否存在trackspreadsheetnztplpy函数,并且表nztgsheet存在。我在旧机器上重新运行了该功能,并且运行良好。我使用psql命令\dL检查了新机器上是否安装了plpythonu。

SQL错误:

错误:“ FUNCTION”处或附近的语法错误 第1行:...(当旧(*。与新。*不同)时)执行功能...                                                              ^

在声明中: CREATE TRIGGER trackspreadsheetnzt AFTER UPDATE ON nztgsheet FOR EACH ROW WHEN (OLD.* IS DISTINCT FROM NEW.*) EXECUTE FUNCTION trackspreadsheetnztplpy();

我希望触发器函数能够正常工作,但它会引发语法错误。

1 个答案:

答案 0 :(得分:2)

Postgres 11中引入了EXECUTE FUNCTION语句的CREATE TRIGGER语法。

Postgres 10中,您需要说EXECUTE PROCEDURE

此语法在Postgres 11中由于引入procedures而被弃用,该nested exception is org.apache.ibatis.binding.BindingException: Parameter 'tagId' not found. Available parameters are [0, 1, param1, param2]与函数不同,不能用于实现触发器。