3

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

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.
4

2 回答 2

4

我会说您有一个ON INSERT OR UPDATE触发器employees,直接或间接UPDATE地对employees表执行操作,而不检查它是直接调用还是通过触发器调用。

这通常是一个编程错误,你在桌子上做一个UPDATEemployee不是让你的BEFORE INSERT OR UPDATE ... FOR EACH ROW触发器修改NEW.

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

请参阅防止 PostgreSQL 中的递归触发器

于 2012-08-01T13:29:07.997 回答
2

您能否发布更改 max_stack_depth 时收到的错误消息。

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

设置后请重新加载。

于 2012-08-01T11:27:47.280 回答