首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Postgresql中防止递归查询中的无限循环

在Postgresql中防止递归查询中的无限循环
EN

Stack Overflow用户
提问于 2018-06-25 14:14:34
回答 1查看 7.9K关注 0票数 12

抱歉-这有点模糊..。

这里:(在CTE中寻找无限递归循环)讨论了如何在递归查询中防止无限循环。在那里,在“查询级别”上防止了递归--至少在一个关于Postgresql的答案中是这样的。

Postgresql (10)中有没有实现某种安全网以防止无限递归的方法?使用statement_timeout是一种可行的方法,还是有其他被广泛接受的方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-11 23:22:20

在我的开发环境中,对于递归查询或函数,我总是使用两个熔断器。我的客户在启动时自动设置

代码语言:javascript
复制
set statement_timeout to '10s'

这是非常罕见的,我需要更多,而且经常它拯救我从死胡同循环。

当我从头编写递归查询时,我总是使用一个额外的列来限制所涉及的级别的数量,如下所示:

代码语言:javascript
复制
with recursive cte (root, parent, depth) as (
    select id, parent_id, 1
    from ...
union all
    select c.id, t.parent_id, depth+ 1
    from ...
    where depth < 10
)
select * 
from cte;

在生产中,这两种方式都可能有问题。相反,您可以根据操作系统和/或硬件的预期需求和功能调整配置参数深度(整数)的值。

关于Postgres 14+中新特性的替代方法和示例,请参见14+。

票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51025607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档