创建触发器时或附近的 PostgreSQL 语法错误
PostgreSQL Syntax error at or near FUNCTION on create trigger
我在一台新机器上安装了 postgresql 和 postgresql-plpython-10(使用 apt)运行 Ubuntu 服务器 18.04
并且我已经将另一台机器上的 Postgresql 数据库(使用 pg_dumpall
提取)恢复到新机器上 (Linux)。
我检查了数据库中存在 trackspreadsheetnztplpy 函数并且存在 table nztgsheet。我在旧机器上重新运行了这个功能,它运行得很好。我使用 psql 命令检查了 plpythonu 是否安装在新机器上:\dL
.
SQL 错误:
错误:"FUNCTION" 处或附近的语法错误
第 1 行:...H ROW WHEN (OLD.* IS DISTINCT FROM NEW.*) EXCUTE FUNCTION t...
^
声明中:
CREATE TRIGGER trackspreadsheetnzt AFTER UPDATE ON nztgsheet FOR EACH ROW WHEN (OLD.* IS DISTINCT FROM NEW.*) EXECUTE FUNCTION trackspreadsheetnztplpy();
我希望触发器函数能够正常工作,但它却抛出了语法错误。
CREATE TRIGGER
语句的 EXECUTE FUNCTION
语法在 Postgres 11 中引入。
在Postgres 10中,你需要说EXECUTE PROCEDURE
。
此语法在 Postgres 11 中已弃用,引入了 procedures,它与函数不同,不能用于实现触发器。
如果您尝试从 pgadmin UI 添加触发器功能,
在代码选项卡中,您需要指定从 BEGIN 到 END 的函数,因为 postgres 在代码中隐式指定“ CREATE OR REPLACE FUNCTION ****()
RETURNS 触发
作为
$$
我在一台新机器上安装了 postgresql 和 postgresql-plpython-10(使用 apt)运行 Ubuntu 服务器 18.04
并且我已经将另一台机器上的 Postgresql 数据库(使用 pg_dumpall
提取)恢复到新机器上 (Linux)。
我检查了数据库中存在 trackspreadsheetnztplpy 函数并且存在 table nztgsheet。我在旧机器上重新运行了这个功能,它运行得很好。我使用 psql 命令检查了 plpythonu 是否安装在新机器上:\dL
.
SQL 错误:
错误:"FUNCTION" 处或附近的语法错误 第 1 行:...H ROW WHEN (OLD.* IS DISTINCT FROM NEW.*) EXCUTE FUNCTION t... ^
声明中:
CREATE TRIGGER trackspreadsheetnzt AFTER UPDATE ON nztgsheet FOR EACH ROW WHEN (OLD.* IS DISTINCT FROM NEW.*) EXECUTE FUNCTION trackspreadsheetnztplpy();
我希望触发器函数能够正常工作,但它却抛出了语法错误。
CREATE TRIGGER
语句的 EXECUTE FUNCTION
语法在 Postgres 11 中引入。
在Postgres 10中,你需要说EXECUTE PROCEDURE
。
此语法在 Postgres 11 中已弃用,引入了 procedures,它与函数不同,不能用于实现触发器。
如果您尝试从 pgadmin UI 添加触发器功能, 在代码选项卡中,您需要指定从 BEGIN 到 END 的函数,因为 postgres 在代码中隐式指定“ CREATE OR REPLACE FUNCTION ****() RETURNS 触发 作为 $$