Database postgresql中的最大堆栈深度错误
我创建触发器来存储工资金额,但当我启动Insert查询时Database postgresql中的最大堆栈深度错误,database,postgresql,Database,Postgresql,我创建触发器来存储工资金额,但当我启动Insert查询时 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@
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\u stack\u depth
限制的错误,因此任何人都可以告诉我解决此错误的方法
我还尝试更改配置文件中max\u stack\u 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.
当您更改最大堆栈深度时,是否可以发布您收到的错误消息 linux系统中的“ulimit-s”将给出堆栈深度。 将最大堆栈深度比实际服务器限制(ulimit-s)小一两个
设置此选项后,请重新加载。我想说,您有一个
ON INSERT或UPDATE
触发器ONemployees
,它直接或间接地对employees
表进行更新,而不检查是直接调用还是通过触发器调用
这通常是一个编程错误,您在employee
表上执行更新
,而不是在插入或更新之前执行。。。对于每行
触发器,修改新建
的值
有时这是两个触发器之间的相互递归,这很难处理。不幸的是,我不知道有什么方法可以检测触发器是由直接客户端语句调用的,还是通过另一个存储的proc或触发器调用的。通常需要进行设计更改以避免相互递归
请参阅。我没有看到触发器。也许你也应该给我们看看这个的来源。(触发器函数是递归的吗?)。我查看了文档,看看是否有任何神奇的变量来判断某个函数是否在触发器中执行。没有。但是对于那些希望增加最大堆栈深度的人,他们会如何更改设置?@bWilliamson如果需要,你可能做错了什么。PostgreSQL不太适合深度递归调用,您应该重构以使用迭代模型,或者最好使用更多的关系集操作。研究递归CTE(实际上是迭代的),即带有递归的,是否可以帮助您。