返回顶部
首页 > 资讯 > 错误编码 >PostgreSQL 42P19: invalid_recursion 报错 故障修复 远程处理
  • 661
分享到

PostgreSQL 42P19: invalid_recursion 报错 故障修复 远程处理

报错故障PostgreSQL 2023-11-05 01:11:46 661人浏览 薄情痞子
摘要

文档解释 42P19: invalid_recursion 错误说明 “invalid_recursion” 错误是 postgresql 消息中最常见的类型之一,它们有助于提醒创建者,因为他们试图执行递归操作,而

文档解释

42P19: invalid_recursion

错误说明

“invalid_recursion” 错误是 postgresql 消息中最常见的类型之一,它们有助于提醒创建者,因为他们试图执行递归操作,而这不被 Postgresql 数据库所支持,并发现了一些有潜在问题的内容。

常见案例

此错误出现的情况很普遍,主要特征是一组 SQL 语句试图通过它们自己的子句来访问自身,因此,此过程被视为无效递归操作。例如,下面的简单代码示例会引发无效递归的错误:

SELECT * FROM table_name

WHERE ID IN (SELECT ID FROM table_name);

上面的代码将导致 “invalid_recursion” 错误,因为 WHERE 子句的查询试图访问自身。另一个典型的情况是触发一组 SQL 语句,它们尝试从同一表中检索数据,并希望在这种情况下,可以使用不同的 Between 字句来匹配不同的筛选标准:

SELECT * FROM table_name

WHERE (Date1 Between ‘2013-01-01’ And ‘2013-01-30’)

AND (Date2 Between ‘2013-02-01’ And ‘2013-02-28’);

解决方法

要解决 “invalid_recursion” 错误,必须用另一种方法重新编写 SQL 语句,以便不需要访问自身,而只有在这种情况下,才能保证有效性。例如,对于上面的示例,可以使用 LEFT JOIN 来解决上述问题:

SELECT t1.ID

FROM table_name AS t1

LEFT JOIN table_name AS t2

ON t1.ID = t2.ID;

此外,还可以结合使用临时表,而无需试图访问同一表:

SELECT *

FROM table_name

INNER JOIN

(SELECT ID FROM table_name) AS temp_table

ON table_name.ID = temp_table.ID;

这是典型的无效递归的案例,通过使用 LEFT 连接或临时表,可以很容易地解决此类问题,从而避免尝试读取自身的内容所带来的问题。

--结束END--

本文标题: PostgreSQL 42P19: invalid_recursion 报错 故障修复 远程处理

本文链接: https://lsjlt.com/news/528886.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作