使用ORDER BY与RETURN AS r时Apache AGE报错:异常行为
Apache AGE中
ERROR: could not find rte for r错误的原因与解决方法 错误原因
这个错误的核心是Cypher内部返回列的别名与外部PostgreSQL语句定义的结果别名不匹配,导致PostgreSQL无法找到对应的Range Table Entry(RTE)。具体到你的查询:
- 你在Cypher语句里返回的列别名是
custom_node,并基于这个别名做排序 - 但外部PostgreSQL将Cypher查询的结果别名设为
r - Apache AGE在处理Cypher内部的
ORDER BY时,会尝试关联内部别名和外部别名,两者不一致就触发了这个错误
另外补充:你创建节点时设置的属性是prop,但查询里用了n.name,这会返回NULL,但不是当前报错的直接原因。
解决方法
有两种可行的修正方式:
方式一:统一内外别名
让外部PostgreSQL的结果别名和Cypher内部返回的列别名保持一致,同时修正节点属性的错误:
SELECT * FROM cypher('sample_graph', $$ MATCH p=(n)-[]->(m) RETURN n.prop AS custom_node ORDER BY custom_node $$) AS (custom_node agtype);
方式二:将排序移到外部PostgreSQL层
把ORDER BY从Cypher内部移到外部PostgreSQL语句中,这样无需关注内外别名的一致性:
SELECT * FROM cypher('sample_graph', $$ MATCH p=(n)-[]->(m) RETURN n.prop AS custom_node $$) AS (r agtype) ORDER BY r;
内容的提问来源于stack exchange,提问作者Abdul
相关产品推荐
相关产品推荐

