Postgresql:插入/更新后的触发器功能:堆栈深度限制错误

时间:2014-03-20 17:05:15

标签: function postgresql triggers stack depth

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

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;

但是,当我直接使用客户端应用程序进行任何数据更改时,我收到消息:Stack Depth Limit Exceeded。我想,通过'在哪里'条款我不应该看到这个问题,但仍然看到这个。任何的想法? 谢谢!

2 个答案:

答案 0 :(得分:2)

我在Trigger中处于无限循环中。这是我如何解决问题。感谢:

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;

答案 1 :(得分:1)

看起来你创建了一个无限循环。你的触发器函数调用firefly_addupdate_creategeometry(),它对表调用触发函数进行更新,该函数调用firefly_addupdate_creategeometry()来更新表...