堆栈深度限制超过 PostgreSQL 插入触发器
Stack depth limit exceeded PostgreSQL insert trigger
我正在尝试创建一个简单的触发器,将一行插入具有反转值的朋友 table,因此当 (1,2) 被插入时 (2,1) 也会被插入,但是我不断收到此错误,我不确定出了什么问题。
错误:超出堆栈深度限制
提示:在确保平台的堆栈深度限制足够后,增加配置参数 "max_stack_depth"(当前为 2048kB)。
上下文:SQL 语句 "insert into friend(ID1,ID2) values (NEW.ID2, NEW.ID1)"
PL/pgSQL 函数 friend_add() 第 2 行在 SQL 语句
CREATE OR REPLACE FUNCTION public.friend_add()
RETURNS trigger
LANGUAGE 'plpgsql'
VOLATILE
COST 100
AS $BODY$begin
insert into friend(ID1,ID2) values (NEW.ID2, NEW.ID1);
return new;
end
end;$BODY$;
CREATE TRIGGER friend_add
AFTER INSERT
ON public.friend
FOR EACH ROW
EXECUTE PROCEDURE public.friend_add();
这是我的函数和触发器定义。
这是一个无限循环:你插入 ID1-ID2,然后触发器插入 ID2-ID1,它被再次插入 ID1-ID2 等的触发器捕获。
您只需插入一次。最简单的(可能也是最安全的)是对 ID1-ID2 进行唯一约束,并进行更新插入:
insert into friend(ID1,ID2) values (NEW.ID2, NEW.ID1) ON CONFLICT (ID1,ID2) DO NOTHING;
我正在尝试创建一个简单的触发器,将一行插入具有反转值的朋友 table,因此当 (1,2) 被插入时 (2,1) 也会被插入,但是我不断收到此错误,我不确定出了什么问题。
错误:超出堆栈深度限制 提示:在确保平台的堆栈深度限制足够后,增加配置参数 "max_stack_depth"(当前为 2048kB)。 上下文:SQL 语句 "insert into friend(ID1,ID2) values (NEW.ID2, NEW.ID1)" PL/pgSQL 函数 friend_add() 第 2 行在 SQL 语句
CREATE OR REPLACE FUNCTION public.friend_add()
RETURNS trigger
LANGUAGE 'plpgsql'
VOLATILE
COST 100
AS $BODY$begin
insert into friend(ID1,ID2) values (NEW.ID2, NEW.ID1);
return new;
end
end;$BODY$;
CREATE TRIGGER friend_add
AFTER INSERT
ON public.friend
FOR EACH ROW
EXECUTE PROCEDURE public.friend_add();
这是我的函数和触发器定义。
这是一个无限循环:你插入 ID1-ID2,然后触发器插入 ID2-ID1,它被再次插入 ID1-ID2 等的触发器捕获。
您只需插入一次。最简单的(可能也是最安全的)是对 ID1-ID2 进行唯一约束,并进行更新插入:
insert into friend(ID1,ID2) values (NEW.ID2, NEW.ID1) ON CONFLICT (ID1,ID2) DO NOTHING;