2013-03-22 100 views
1

我在我的jboss 5.1 -java-jpa-hibernate-postgresql应用程序中运行select查询。这个查询是一个包含10个查询的UNION查询,现在通常应该返回大约25.000个BigInteger数字(稍后会更多)。昨天这个功能工作正常。今天我得到以下错误。有人可以咨询吗?我找不到这个错误。错误:超出堆栈深度限制 - Java hibernate postgresql

ERROR: stack depth limit exceeded Hint: Increase the configuration parameter "max_stack_depth", after ensuring the platform's stack depth limit is adequate. 

如果我一个接一个地运行10个查询,然后将结果添加到一个ArrayList会有帮助吗?


编辑:

版本PostgreSQL的使用:在PostgreSQL-9.0-801.jdbc4.jar

我不能显示出于安全原因,准确的查询。但它是这样的:

SELECT * FROM (
    SELECT fileId FROM table1 
    UNION 
    SELECT fileId FROM table2 
    ... 
    ... 
    SELECT fileId FROM table_n 
); 

此查询现在返回角落找寻25.000 BigInteger的条目(这是关于在未来将达到120.000)。有什么建议么?

+0

请显示PostgreSQL版本,查询文本和查询的'EXPLAIN'。是否有PL/PgSQL功能? – 2013-03-22 09:47:49

+0

@CraigRinger请检查原始文章中的修改。 – Panos 2013-03-22 10:17:50

+0

你应该找出一个导致这个问题的陈述,但你可以发布。在大多数情况下,这足以理解甚至常常解决问题。如果没有,你至少有东西要发布 – 2013-03-22 11:49:29

回答

0

问题已解决。这发生了一个非常非常大的查询发送到postgresql。

代码中存在一个动态创建查询的错误,而不是一个联合查询中的10个查询,它复制了它们,并且在一个联合查询中有数百个相同的查询系列。所有这些都导致了数据库中的巨大查询,并导致数据库中的事务超时。

我更改了代码以通过自身执行每个查询并使用代码合并结果。当然,我修复了这个bug,它只生成了10个正确的查询。

谢谢大家的帮助。