为什么我的PostgreSQL服务器崩溃时,我使用一个特定的查询与apacheAGE?

2ul0zpep  于 2023-03-29  发布在  PostgreSQL
关注(0)|答案(2)|浏览(162)

在这种情况下,数据设置无关紧要。
我得到了这个server closed the connection unexpectedly This probably means the server terminated abnormally before or while processing the request.这是一个已知的bug还是我这边的一些东西?我使用的是PostgreSQL版本12.14和apacheAGE 1.1.1

gzszwxb4

gzszwxb41#

此查询应该出错(如下所示),而不是终止服务器,因为您正在尝试**引用WITH子句未保留的b。**阅读有关WITH子句here的详细信息。

ERROR:  could not find rte for b
LINE 1: ...$$ match (a)-[]->(b) with a, count(*) as c return b $$) as (...
                                                             ^

服务器崩溃是由于最近修复的一个bug造成的。请参阅此问题https://github.com/apache/age/issues/329。所以直到现在,最新版本v1.2.0还没有包含此修复。
如果你想在WITH之后访问B,你必须传递它
x一个一个一个一个x一个一个二个x
如果你想看到修改(比如错误而不是服务器崩溃),你必须从PG12 branch中拉取最近的提交(因为你使用的是postgres 12)并重建。

mzillmmw

mzillmmw2#

看看这个查询,我相信你想做的是计算“a”和“b”之间的关系的数量,以及它们之间的一条边的长度。所以,图中的边的数量。如果是这种情况,正确的方法是这样的:

SELECT * FROM cypher('test', $$
    MATCH p = (a)-[]->(b)
    RETURN count(p)
$$) AS (edge_count agtype);

关于这个错误,我使用GDB调试它,当它到达list.c文件上的list_nth_cell时,它在一个错误处停止。显示的错误是:

0x000000000088906d in ExceptionalCondition (
    conditionName=conditionName@entry=0xa2ac43 "!(n < list->length)", 
    errorType=errorType@entry=0x8d4034 "FailedAssertion", 
    fileName=fileName@entry=0xa560cc "list.c", lineNumber=lineNumber@entry=392)
    at assert.c:54

因此,当它试图计数时,这个n属性可能大于列表长度,这会抛出一个错误。我猜测问题发生在查询的count(*)部分。

相关问题