Apache AGE执行Cypher查询报错:function cypher(unknown, unknown)不存在
问题:Apache AGE执行Cypher查询时提示"function cypher(unknown, unknown) does not exist"
问题描述
尝试在PostgreSQL中通过cypher函数执行Apache AGE的Cypher查询:
SELECT * FROM cypher('g1', $$ MATCH (n) return n $$);
收到错误信息:
ERROR: function cypher(unknown, unknown) does not exist LINE 1: SELECT * FROM cypher('g1', $$ MATCH (n) return n $$); ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts.
已完成的验证:
- 通过
SELECT * FROM pg_extension WHERE extname = 'age';确认AGE扩展已安装并添加到当前数据库 - 使用的图名称
g1正确
解决方案
1. 确保ag_catalog schema在搜索路径中
AGE的cypher函数默认位于ag_catalog schema下,若该schema不在当前会话的搜索路径中,PostgreSQL无法找到函数。执行以下操作:
-- 查看当前搜索路径 SHOW search_path; -- 临时添加ag_catalog到搜索路径 SET search_path TO ag_catalog, "$user", public;
若需永久生效,可修改数据库或用户的默认搜索路径:
-- 为当前数据库设置永久搜索路径 ALTER DATABASE your_database_name SET search_path TO ag_catalog, "$user", public; -- 为当前用户设置永久搜索路径 ALTER USER your_user_name SET search_path TO ag_catalog, "$user", public;
2. 显式指定schema调用函数
无需修改搜索路径,直接在函数名前加上ag_catalog schema,同时显式指定返回类型(避免类型匹配问题):
SELECT * FROM ag_catalog.cypher('g1'::text, $$ MATCH (n) RETURN n $$) AS (n ag_catalog.ag_node);
3. 重新安装AGE扩展(排查完整性问题)
若扩展安装不完整,可尝试重新创建扩展(操作前建议备份数据):
DROP EXTENSION IF EXISTS age; CREATE EXTENSION age; LOAD 'age';
4. 核对PostgreSQL与AGE的版本兼容性
确保安装的Apache AGE版本与PostgreSQL版本匹配,例如:
- AGE 1.1.x 适配 PostgreSQL 12/13
- AGE 1.2.x 适配 PostgreSQL 14
- AGE 1.3.x 适配 PostgreSQL 15
版本不兼容会导致函数无法正常识别。
内容的提问来源于stack exchange,提问作者Omar Saad
相关产品推荐
相关产品推荐

