Irf*_*son 3 postgresql stack triggers function depth
我有一个 Postgresql 数据库触发器,它应该在插入新行或更新行后调用函数。这是触发器:
CREATE TRIGGER firefly_new_geom
AFTER INSERT OR UPDATE
ON public.entries FOR EACH STATEMENT
EXECUTE PROCEDURE public.firefly_addupdate_creategeometry();
Run Code Online (Sandbox Code Playgroud)
这是被调用的函数:
BEGIN
UPDATE entries SET geom = ST_SetSRID(ST_MakePoint(longitude,latitude),4326) where geom is null;
return new;
END;
Run Code Online (Sandbox Code Playgroud)
但是,当我直接使用客户端应用程序进行任何数据更改时,我收到消息:超出堆栈深度限制。我想,通过使用“where”子句,我不应该看到这个问题,但仍然会看到这个。任何想法?谢谢!
我在触发器中处于无限循环中。这是我解决问题的方法。谢谢:
http://www.depesz.com/2012/02/01/waiting-for-9-2-trigger-深度/
触发 DDL:
CREATE TRIGGER firefly_new_geom
AFTER INSERT OR UPDATE
ON public.entries FOR EACH STATEMENT
EXECUTE PROCEDURE public.firefly_addupdate_creategeometry();
Run Code Online (Sandbox Code Playgroud)
功能:
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;
Run Code Online (Sandbox Code Playgroud)