【问题标题】:PostgreSQL Syntax error at or near FUNCTION on create trigger创建触发器上的 FUNCTION 处或附近的 PostgreSQL 语法错误
【发布时间】:2021-09-16 02:13:32
【问题描述】:

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

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

SQL 错误:

错误:“FUNCTION”处或附近的语法错误 第 1 行:...H ROW WHEN(旧。* 与新的不同。*)执行函数 t... ^

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

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

【问题讨论】:

    标签: postgresql database-trigger


    【解决方案1】:

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

    Postgres 10 中,您需要改为使用EXECUTE PROCEDURE

    这种语法在 Postgres 11 中被弃用,引入了 procedures,它与函数不同,不能用于实现触发器。

    【讨论】:

    • 谢谢。是的,旧机器运行的是版本 11。将新机器升级到版本 11,现在它可以工作了!谢谢。
    【解决方案2】:

    如果您尝试从 pgadmin UI 添加触发功能, 在代码选项卡中,您需要指定从 BEGIN 到 END 的函数,因为 postgres 在代码中隐式指定“ CREATE OR REPLACE FUNCTION ****() 返回触发 作为 $$"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-10
      • 1970-01-01
      • 2020-05-02
      • 2016-11-22
      • 2016-10-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多