function - Postgresql:插入/更新后触发函数:堆栈深度限制错误

标签 function postgresql triggers stack depth

我有一个 Postgresql 数据库触发器,它应该在插入新行或更新行后调用函数。这是触发器:

CREATE TRIGGER firefly_new_geom
AFTER INSERT OR UPDATE 
ON public.entries FOR EACH STATEMENT 
EXECUTE PROCEDURE public.firefly_addupdate_creategeometry();

这里是被调用的函数:

   BEGIN
   UPDATE entries SET geom = ST_SetSRID(ST_MakePoint(longitude,latitude),4326) where geom is null;
   return new;
   END;

但是,当我直接使用客户端应用程序进行任何数据更改时,我收到消息:已超出堆栈深度限制。我想,通过使用“where”子句,我不应该看到这个问题,但仍然会看到这个。任何想法? 谢谢!

最佳答案

我在触发器中处于无限循环中。这是我解决问题的方法。感谢:

http://www.depesz.com/2012/02/01/waiting-for-9-2-trigger-depth/

触发器 DDL:

CREATE TRIGGER firefly_new_geom
AFTER INSERT OR UPDATE 
ON public.entries FOR EACH STATEMENT 
EXECUTE PROCEDURE public.firefly_addupdate_creategeometry();

函数:

 BEGIN
    IF pg_trigger_depth() <> 1 THEN
        RETURN NEW;
    END IF;
   UPDATE entries SET geom = ST_SetSRID(ST_MakePoint(longitude,latitude),4326);
   return new;
END;

关于function - Postgresql:插入/更新后触发函数:堆栈深度限制错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22540221/

相关文章:

javascript从弹出窗口返回值作为没有输入字段的函数中的变量

c++ - 如何编写一个接受具有相同接口(interface)的不同类型参数的函数?

postgresql - 删除 Windows 7 上的 postgres 用户帐户

Mysql触发器显式隐式命令不允许

oracle - PLS-00382 : expression is of wrong type Trigger

python - 在 Python 函数中返回多个列表

javascript - 为什么我的 javascript 函数只有在我手动输入输入时才起作用?

postgresql - 液碱 : unterminated dollar-quoted string at or near $BODY$

python - 如何修复与 Postgres 的连接

python - 如何设置事件调度程序来检查给定 Mysql 表中是否有新行