postgresql中的max_stack_depth错误

时间:2012-08-01 11:11:30

标签: database postgresql

我创建触发器来存储工资金额,但是当我解雇插入查询

INSERT INTO employees(
            employee_id, first_name, last_name, email, phone_number,  hire_date, 
            job_id, salary, commission_pct, manager_id, department_id)
    VALUES (2002,'poiuy','patel','bhargavgor@dfghj',9898562123,'2012-07-31 00:00:00','IT_PROG',4500.00,0.00,100,60);

然后它会显示以下错误设置max_stack_depth的限制所以任何人都可以给我解决此错误的想法..

我还尝试在配置文件中更改max_stack_depth的值,但它不起作用

错误如下

ERROR:  stack depth limit exceeded
HINT:  Increase the configuration parameter "max_stack_depth" (currently 2048kB), after ensuring the platform's stack depth limit is adequate.

2 个答案:

答案 0 :(得分:4)

我说你在ON INSERT OR UPDATE上有一个employees触发器,直接或间接地对UPDATE表执行employees而不检查是否直接调用它或通过触发器。

这通常是编程错误,您在UPDATE表上执行employee而不是让BEFORE INSERT OR UPDATE ... FOR EACH ROW触发器修改NEW的值。< / p>

有时它是两个触发器之间的相互递归,这很难处理。不幸的是,我不知道有任何方法来检测触发器是由直接客户端语句还是通过另一个存储过程或触发器调用的。通常需要进行设计更改以避免相互递归。

请参阅Prevent recursive trigger in PostgreSQL

答案 1 :(得分:2)

您可以发布更改max_stack_depth时收到的错误消息。

linux系统中的“ulimit -s”将给出堆栈深度。 将max_stack_depth设置为比实际服务器限制(ulimit -s)少一个或两个。

设置完成后请重新加载。