所有服务器通知代码列表

以下页面概述了 Neo4j 中的所有通知,以及一些场景及其可能的解决方案。

PERFORMANCE 通知

当查询使用代价高昂的操作且性能可能通过更改查询或添加索引来提高时,将返回性能通知。

笛卡尔积

当计划中存在笛卡尔积时,将返回此通知。

表 1. 通知详细信息

Neo4j 代码

Neo.ClientNotification.Statement.CartesianProduct

标题

此查询在断开的模式之间构建笛卡尔积。

描述

如果查询的一部分包含多个断开的模式,则将在所有这些部分之间构建笛卡尔积。这可能会产生大量数据并减慢查询处理速度。虽然偶尔是故意的,但通常可以重新制定避免使用此交叉积的查询,也许是通过在不同部分之间添加关系或使用 OPTIONAL MATCH (%s)

类别

PERFORMANCE

GQLSTATUS 代码

03N90

状态描述

info: 笛卡尔积。断开的模式 { $pat } 构建笛卡尔积。笛卡尔积可能会产生大量数据并减慢查询处理速度。

分类

PERFORMANCE

SeverityLevel

INFORMATION

示例 1. 包含许多断开模式的查询
查询
MATCH (c:Child), (p:Parent) RETURN c, p
返回代码的描述

如果查询的一部分包含多个断开的模式,则将在所有这些部分之间构建笛卡尔积。这可能会产生大量数据并减慢查询处理速度。虽然偶尔是故意的,但通常可以重新制定避免使用此交叉积的查询,也许是通过在不同部分之间添加关系或使用 OPTIONAL MATCH (标识符为: (p))

改进建议

如果需要笛卡尔积,则无法对该查询进行任何改进。然而,在许多情况下,您可能不需要所有子节点和父节点的组合,在这种情况下,可以对该查询进行改进。例如,如果您需要子节点及其父节点,则可以通过将查询重写为以下内容来改进它

MATCH (c:Child)-[:ChildOf]->(p:Parent) RETURN c, p
查询
MATCH (c:Child), (p:Parent) RETURN c, p
返回的 GQLSTATUS 代码

03N90

返回的状态描述

info: 笛卡尔积。断开的模式 (c:Child), (p:Parent) 构建笛卡尔积。笛卡尔积可能会产生大量数据并减慢查询处理速度。

改进建议

如果需要笛卡尔积,则无法对该查询进行任何改进。然而,在许多情况下,您可能不需要所有子节点和父节点的组合,在这种情况下,可以对该查询进行改进。例如,如果您需要子节点及其父节点,则可以通过将查询重写为以下内容来改进它

MATCH (c:Child)-[:ChildOf]->(p:Parent) RETURN c, p

无界可变长度模式

当在可变长度关系上未指定上限时,将返回此通知。

表 2. 通知详细信息

Neo4j 代码

Neo.ClientNotification.Statement.UnboundedVariableLengthPattern

标题

提供的模式是无界的,请考虑为节点跃迁次数添加上限。

描述

使用无界模式的最短路径可能会导致执行时间过长。建议在模式中的节点跃迁次数使用上限。

类别

PERFORMANCE

GQLSTATUS 代码

03N91

状态描述

info: 无界可变长度模式。提供的模式 { $pat } 是无界的。使用无界模式的最短路径可能会导致执行时间过长。在模式中的节点跃迁次数使用上限 (例如 [*..5])。

分类

PERFORMANCE

SeverityLevel

INFORMATION

示例 2. 使用无界模式的最短路径
查询
MATCH p=shortestPath((n)-[*]->(m))
WHERE n <> m
RETURN p
返回代码的描述

使用无界模式的最短路径可能会导致执行时间过长。建议在模式中的节点跃迁次数使用上限。

改进建议

如果您的图很大,此查询可能会非常慢。请考虑添加上限。

MATCH p=shortestPath((n)-[*..8]->(m))
WHERE n <> m
RETURN p
查询
MATCH p=shortestPath((n)-[*]->(m))
WHERE n <> m
RETURN p
返回的 GQLSTATUS 代码

03N91

返回的状态描述

info: 无界可变长度模式。提供的模式 (n)-[*]→(m) 是无界的。使用无界模式的最短路径可能会导致执行时间过长。在模式中的节点跃迁次数使用上限 (例如 [*..5])。

改进建议

如果您的图很大,此查询可能会非常慢。请考虑添加上限。

MATCH p=shortestPath((n)-[*..8]->(m))
WHERE n <> m
RETURN p

穷举最短路径

当在最短路径上给定的谓词需要检查整个路径才能确定其是否有效时,将返回此通知,最短路径可能会回退到穷举搜索算法。有关详细信息,请参阅 Cypher 手册 → 最短路径 - 路径上的额外谓词检查

表 3. 通知详细信息

Neo4j 代码

Neo.ClientNotification.Statement.ExhaustiveShortestPath

标题

已为您的查询规划了穷举最短路径,这意味着最短路径图算法可能不会用于查找最短路径。因此,可能会使用所有路径的穷举枚举来查找请求的最短路径。

描述

使用具有穷举搜索回退的最短路径可能会导致查询速度变慢,因为最短路径图算法可能不适用于这种情况。建议在 MATCH 包含最短路径与该路径上的存在谓词之间引入 WITH

类别

PERFORMANCE

GQLSTATUS 代码

03N92

状态描述

info: 穷举最短路径。由于存在谓词 { $pred_list },查询以穷举最短路径运行。可以使用 WITHMATCH 与存在谓词分开。

分类

PERFORMANCE

SeverityLevel

INFORMATION

示例 3. 以穷举最短路径运行的查询
查询
MATCH p = shortestPath(()-[*..42]-())
WHERE ANY(n in nodes(p) WHERE n:Label)
RETURN p
返回代码的描述

使用具有穷举搜索回退的最短路径可能会导致查询速度变慢,因为最短路径图算法可能不适用于这种情况。建议在 MATCH 包含最短路径与该路径上的存在谓词之间引入 WITH

改进建议

通过在 MATCH 子句后引入 WITH 来分离谓词。

MATCH p = shortestPath(()-[*..42]-())
WITH p
WHERE ANY(n in nodes(p) WHERE n:Label)
RETURN p
查询
MATCH p = shortestPath(()-[*..42]-())
WHERE ANY(n in nodes(p) WHERE n:Label)
RETURN p
返回的 GQLSTATUS 代码

03N92

返回的状态描述

info: 穷举最短路径。由于存在谓词 ANY(n in nodes(p) WHERE n:Label),查询以穷举最短路径运行。可以使用 WITHMATCH 与存在谓词分开。

改进建议

通过在 MATCH 子句后引入 WITH 来分离谓词。

MATCH p = shortestPath(()-[*..42]-())
WITH p
WHERE ANY(n in nodes(p) WHERE n:Label)
RETURN p

无适用索引

当使用 LOAD CSVMATCHMERGE 子句匹配未索引的标签时,将返回此通知。这可能在大型数据集上执行效果不佳。添加索引可以提高查询速度。

表 4. 通知详细信息

Neo4j 代码

Neo.ClientNotification.Statement.NoApplicableIndex

标题

添加模式索引可以加快此查询的速度。

描述

使用 LOAD CSV 后面跟着 MATCHMERGE 匹配未索引的标签在大型数据集上很可能执行效果不佳。请考虑使用模式索引。

类别

PERFORMANCE

GQLSTATUS 代码

03N93

状态描述

info: 没有适用索引。LOAD CSVMATCHMERGE 结合使用,但标签没有索引,可能会导致执行时间过长。请考虑为标签 { $label } 添加索引。

分类

PERFORMANCE

SeverityLevel

INFORMATION

示例 4. LOAD CSVMATCHMERGE 结合使用
查询
LOAD CSV FROM 'file:///ignore/ignore.csv' AS line WITH * MATCH (n:Person{name:line[0]}) RETURN line, n
返回代码的描述

使用 LOAD CSV 后面跟着 MATCHMERGE 匹配未索引的标签在大型数据集上很可能执行效果不佳。请考虑使用模式索引。

改进建议

为标签和匹配属性创建索引。

CREATE INDEX FOR (n:Person) ON (n.name)
查询
LOAD CSV FROM 'file:///ignore/ignore.csv' AS line WITH * MATCH (n:Person{name:line[0]}) RETURN line, n
返回的 GQLSTATUS 代码

03N93

返回的状态描述

info: 没有适用索引。LOAD CSVMATCHMERGE 结合使用,但标签没有索引,可能会导致执行时间过长。请考虑为标签 Person 添加索引。

改进建议

为标签和匹配属性创建索引。

CREATE INDEX FOR (n:Person) ON (n.name)

急切操作符

当查询的执行计划包含Eager 操作符时,将返回此通知。

表 5. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.EagerOperator

标题

此查询的执行计划包含 Eager 操作符,它强制所有依赖数据在继续执行之前在主内存中物化。

描述

在执行计划包含 Eager 操作符的查询中,将大型数据集与 LOAD CSV 结合使用,可能会消耗大量内存,并且执行效果可能不佳。有关更多信息以及如何避免问题的提示,请参阅 Neo4j 手册中关于 Eager 操作符的条目。

类别

PERFORMANCE

GQLSTATUS 代码

03N94

状态描述

info: 急切操作符。查询执行计划包含 Eager 操作符。LOAD CSVEager 结合使用可能会消耗大量内存。

分类

PERFORMANCE

SeverityLevel

INFORMATION

示例 5. LOAD CSV 与急切操作符结合使用

LOAD CSV 与急切操作符结合使用可能会占用大量内存。

查询
LOAD CSV FROM 'file:///ignore/ignore.csv' AS line MATCH (n:Person{name:line[0]}) DELETE n RETURN line
返回代码的描述

在执行计划包含 Eager 操作符的查询中,将大型数据集与 LOAD CSV 结合使用,可能会消耗大量内存,并且执行效果可能不佳。有关更多信息以及如何避免问题的提示,请参阅 Neo4j 手册中关于 Eager 操作符的条目。

改进建议

有关更多信息以及如何避免问题的提示,请参阅 Cypher 手册 → 急切操作符。在本例中,查询可以改写为以下形式:

LOAD CSV FROM 'file:///ignore/ignore.csv' AS line
CALL {
    WITH line
    MATCH (n:Person{name:line[0]}) DELETE n
}
RETURN line
查询
LOAD CSV FROM 'file:///ignore/ignore.csv' AS line MATCH (n:Person{name:line[0]}) DELETE n RETURN line
返回的 GQLSTATUS 代码

03N94

返回的状态描述

info: 急切操作符。查询执行计划包含 Eager 操作符。LOAD CSVEager 结合使用可能会消耗大量内存。

改进建议

有关更多信息以及如何避免问题的提示,请参阅 Cypher 手册 → 急切操作符。在本例中,查询可以改写为以下形式:

LOAD CSV FROM 'file:///ignore/ignore.csv' AS line
CALL {
    WITH line
    MATCH (n:Person{name:line[0]}) DELETE n
}
RETURN line

动态属性

表 6. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.DynamicProperty

标题

使用动态属性的查询将不会对这些属性使用索引查找或索引扫描。

描述

使用动态属性使得无法对此查询(%s)使用索引查找。

类别

PERFORMANCE

GQLSTATUS 代码

03N95

状态描述

info: 动态属性。标签/类型 { $label_list } 上存在索引。无法对动态属性使用索引。请考虑使用静态属性。

分类

PERFORMANCE

SeverityLevel

INFORMATION

示例 6. 动态节点属性键使得无法使用索引
查询
MATCH (n:Person) WHERE n[$prop] IS NOT NULL RETURN n;
返回代码的描述

使用动态属性使得无法对此查询(索引标签为:Person)使用索引查找。

改进建议

如果存在 (n:Person) ON (n.name) 的索引,则不会将其用于上述查询,因为查询使用的是动态属性。因此,如果存在索引,最好使用常量值。例如,如果 prop 等于 name,则以下查询将能够使用索引:

MATCH (n:Person) WHERE n.name IS NOT NULL RETURN n;
查询
MATCH (n:Person) WHERE n[$prop] IS NOT NULL RETURN n;
返回的 GQLSTATUS 代码

03N95

返回的状态描述

info: 动态属性。标签/类型 Person 上存在索引。无法对动态属性使用索引。请考虑使用静态属性。

改进建议

如果存在 (n:Person) ON (n.name) 的索引,则不会将其用于上述查询,因为查询使用的是动态属性。因此,如果存在索引,最好使用常量值。例如,如果 prop 等于 name,则以下查询将能够使用索引:

MATCH (n:Person) WHERE n.name IS NOT NULL RETURN n;
示例 7. 动态关系属性键使得无法使用索引
查询
MATCH ()-[r: KNOWS]->() WHERE r[$prop] IS NOT NULL RETURN r
返回代码的描述

使用动态属性使得无法对此查询(索引类型为:KNOWS)使用索引查找。

改进建议

与动态节点属性类似,如果可能,请使用常量值,尤其是在关系属性上存在索引的情况下。例如,如果 { $prop } 等于 since,则可以将查询改写为:

MATCH ()-[r: KNOWS]->() WHERE r.since IS NOT NULL RETURN r
查询
MATCH ()-[r: KNOWS]->() WHERE r[$prop] IS NOT NULL RETURN r
返回的 GQLSTATUS 代码

03N95

返回的状态描述

info: 动态属性。标签/类型 KNOWS 上存在索引。无法对动态属性使用索引。请考虑使用静态属性。

改进建议

与动态节点属性类似,如果可能,请使用常量值,尤其是在关系属性上存在索引的情况下。例如,如果 { $prop } 等于 since,则可以将查询改写为:

MATCH ()-[r: KNOWS]->() WHERE r.since IS NOT NULL RETURN r

代码生成失败

当无法为查询生成代码时,例如,当查询太大时,将创建CodeGenerationFailed 通知。有关特定查询的更多信息,请参阅 debug.log 文件中的堆栈跟踪。

表 7. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.CodeGenerationFailed

标题

数据库无法为查询生成代码。可以在 debug.log 中找到堆栈跟踪。

描述

数据库无法为查询生成代码。可以在 debug.log 中找到堆栈跟踪。(方法太大)

类别

PERFORMANCE

GQLSTATUS 代码

03N96

状态描述

info: 代码生成失败。代码生成失败,回退到解释型 $enginetype 引擎。可以在 debug.log 中找到堆栈跟踪。原因:$msg。

分类

PERFORMANCE

SeverityLevel

INFORMATION

HINT 通知

当 Cypher 计划程序或运行时无法创建查询计划来满足指定提示(例如,JOININDEX)时,默认情况下会返回 HINT 通知。可以通过将配置 dbms.cypher.hints_error 设置为 true 来更改 Cypher 计划程序或运行时的此行为。在这种情况下,查询将返回错误。

连接提示无法满足

表 8. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.JoinHintUnfulfillableWarning

标题

数据库无法规划提示连接。

描述

提示连接未计划。这可能是因为生成的计划中不包含连接键,请尝试使用其他连接键或重新构造查询。(%s

类别

HINT

GQLSTATUS 代码

01N30

状态描述

warn: 连接提示无法满足。无法使用 JOIN ON $var_list 创建计划。尝试更改连接键或重新构造查询。

分类

HINT

SeverityLevel

WARNING

示例 8. 尽管给出了 JOIN 提示,但仍无法满足提示
查询
MATCH (a:A)
WITH a, 1 AS horizon
OPTIONAL MATCH (a)-[r]->(b:B)
USING JOIN ON a
OPTIONAL MATCH (a)--(c)
RETURN *
返回代码的描述

提示连接未计划。这可能是因为生成的计划中不包含连接键,请尝试使用其他连接键或重新构造查询。(提示连接键标识符为:a

改进建议

由于指定的变量在 OPTIONAL MATCH 之前,因此已绑定,无法应用 JOIN 提示。此查询的唯一选择是删除提示或修改查询以允许使用它。

查询
MATCH (a:A)
WITH a, 1 AS horizon
OPTIONAL MATCH (a)-[r]->(b:B)
USING JOIN ON a
OPTIONAL MATCH (a)--(c)
RETURN *
返回的 GQLSTATUS 代码

01N30

返回的状态描述

warn: 连接提示无法满足。无法使用 JOIN ON a 创建计划。尝试更改连接键或重新构造查询。

改进建议

由于指定的变量在 OPTIONAL MATCH 之前,因此已绑定,无法应用 JOIN 提示。此查询的唯一选择是删除提示或修改查询以允许使用它。

提示索引未找到

表 9. 通知详情

Neo4j 代码

Neo.ClientNotification.Schema.HintedIndexNotFound

标题

请求(直接或间接)引用了不存在的索引。

描述

提示索引不存在,请检查架构(%s

类别

HINT

GQLSTATUS 代码

01N31

状态描述

warn: 提示索引未找到。无法使用 { $index_descr } 创建计划,因为索引不存在。

分类

HINT

SeverityLevel

WARNING

示例 9. 尽管给出了索引提示,但仍无法使用标签索引
查询
MATCH (a: Label)
USING INDEX a:Label(id)
WHERE a.id = 1
RETURN a
返回代码的描述

提示索引不存在,请检查架构(索引为:INDEX FOR (a:`Label`) ON (a.id))

改进建议

提示索引不存在,请确保标签和属性拼写正确。如果拼写正确,请创建索引或从查询中删除提示。

查询
MATCH (a: Label)
USING INDEX a:Label(id)
WHERE a.id = 1
RETURN a
返回的 GQLSTATUS 代码

01N31

返回的状态描述

warn: 提示索引未找到。无法使用 INDEX :Label(id) 创建计划,因为索引不存在。

改进建议

提示索引不存在,请确保标签和属性拼写正确。如果拼写正确,请创建索引或从查询中删除提示。

示例 10. 尽管给出了索引提示,但仍无法使用关系索引
查询
MATCH ()-[r:Rel]-()
USING INDEX r:Rel(id)
WHERE r.id = 1
RETURN r
返回代码的描述

提示索引不存在,请检查架构(索引为:INDEX FOR ()-[r:`Rel`]-() ON (r.id))

改进建议

提示索引不存在,请确保关系类型和属性拼写正确。如果拼写正确,请创建索引或从查询中删除提示。

查询
MATCH ()-[r:Rel]-()
USING INDEX r:Rel(id)
WHERE r.id = 1
RETURN r
返回的 GQLSTATUS 代码

01N31

返回的状态描述

warn: 提示索引未找到。无法使用 INDEX :Rel(id) 创建计划,因为索引不存在。

改进建议

提示索引不存在,请确保关系类型和属性拼写正确。如果拼写正确,请创建索引或从查询中删除提示。

UNRECOGNIZED 通知

当查询或命令提及系统未知的实体时,将返回未识别的通知。

主数据库未找到

表 10. 通知详情

Neo4j 代码

Neo.ClientNotification.Database.HomeDatabaseNotFound

标题

请求引用了不存在的主数据库。

描述

提供的主数据库当前不存在于 DBMS 中。此命令在创建此数据库之前不会生效。(%s

类别

UNRECOGNIZED

GQLSTATUS 代码

00N50

状态描述

note: 成功完成 - 主数据库未找到。数据库 { $db } 不存在。请验证拼写是否正确或创建数据库以使命令生效。

分类

UNRECOGNIZED

SeverityLevel

INFORMATION

示例 11. 将 home 数据库设置为不存在的数据库
查询
CREATE USER john SET PASSWORD "secret" SET HOME DATABASE nej4
返回代码的描述

提供的主数据库当前不存在于 DBMS 中。此命令在创建此数据库之前不会生效。(主数据库:nej4

改进建议

请验证主数据库名称是否拼写错误。

查询
CREATE USER john SET PASSWORD "secret" SET HOME DATABASE nej4
返回的 GQLSTATUS 代码

00N50

返回的状态描述

note: 成功完成 - 主数据库未找到。数据库 ne4j 不存在。请验证拼写是否正确或创建数据库以使命令生效。

改进建议

请验证主数据库名称是否拼写错误。

未知标签

表 11. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.UnknownLabelWarning

标题

提供的标签不在数据库中。

描述

查询中的一个标签在数据库中不可用,请确保您没有拼写错误或标签在您在应用程序中运行此语句时可用。(%s

类别

UNRECOGNIZED

GQLSTATUS 代码

01N50

状态描述

warn: 未知标签。标签 { $label } 不存在。请验证拼写是否正确。

分类

UNRECOGNIZED

SeverityLevel

WARNING

示例 12. 匹配具有不存在于数据库中的标签的节点
查询
MATCH (n:Perso) RETURN n
返回代码的描述

查询中的一个标签在数据库中不可用,请确保您没有拼写错误或标签在您在应用程序中运行此语句时可用。(缺少的标签名为:Perso

改进建议

请验证标签是否拼写错误。如果您计划将来使用该标签创建节点,则无需更改。

查询
MATCH (n:Perso) RETURN n
返回的 GQLSTATUS 代码

01N50

返回的状态描述

warn: 未知标签。标签 Perso 不存在。请验证拼写是否正确。

改进建议

请验证标签是否拼写错误。如果您计划将来使用该标签创建节点,则无需更改。

未知关系类型

表 12. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.UnknownRelationshipTypeWarning

标题

提供的关系类型不在数据库中。

描述

查询中的一个关系类型在数据库中不可用,请确保您没有拼写错误或标签在您在应用程序中运行此语句时可用。(%s

类别

UNRECOGNIZED

GQLSTATUS 代码

01N51

状态描述

warn: 未知关系类型。关系类型 { $reltype } 不存在。请验证拼写是否正确。

分类

UNRECOGNIZED

SeverityLevel

WARNING

示例 13. 匹配不存在的类型关系
查询
MATCH (n)-[:NonExistingType]->() RETURN n
返回代码的描述

您的查询中的一种关系类型在数据库中不可用,请确保您没有拼写错误,或者在应用程序中运行此语句时该标签可用(缺少的关系类型为:NonExistingType)。

改进建议

验证关系类型是否拼写错误。如果您计划将来创建这种类型的关系,则无需更改。

查询
MATCH (n)-[:NonExistingType]->() RETURN n
返回的 GQLSTATUS 代码

01N51

返回的状态描述

警告:未知关系类型。关系类型NonExistingType不存在。请验证拼写是否正确。

改进建议

验证关系类型是否拼写错误。如果您计划将来创建这种类型的关系,则无需更改。

未知属性键

表 13. 通知详细信息

Neo4j 代码

Neo.ClientNotification.Statement.UnknownPropertyKeyWarning

标题

提供的属性键不在数据库中

描述

您的查询中的一个属性名称在数据库中不可用,请确保您没有拼写错误,或者在应用程序中运行此语句时该标签可用(%s)。

类别

UNRECOGNIZED

GQLSTATUS 代码

01N52

状态描述

警告:未知属性键。属性{ $propkey }不存在。请验证拼写是否正确。

分类

UNRECOGNIZED

SeverityLevel

WARNING

示例 14. 匹配不存在的属性键
查询
MATCH (n:Person {nme:”Tom”})
RETURN n
返回代码的描述

您的查询中的一个属性名称在数据库中不可用,请确保您没有拼写错误,或者在应用程序中运行此语句时该标签可用(缺少的属性名称为:nme)。

改进建议

验证属性键是否拼写错误。如果您计划将来创建该属性键,则无需更改。

查询
MATCH (n:Person {nme:”Tom”})
RETURN n
返回的 GQLSTATUS 代码

01N52

返回的状态描述

警告:未知属性键。属性nme不存在。请验证拼写是否正确。

改进建议

验证属性键是否拼写错误。如果您计划将来创建该属性键,则无需更改。

聚合跳过空值

表 14. 通知详细信息

Neo4j 代码

Neo.ClientNotification.Statement.AggregationSkippedNull

标题

查询包含一个跳过空值的聚合函数。

描述

查询包含一个跳过空值的聚合函数。

类别

UNRECOGNIZED

GQLSTATUS 代码

01G11

状态描述

警告:在集合函数中消除了空值。

分类

UNRECOGNIZED

SeverityLevel

WARNING

示例 15. 聚合跳过空值
查询
UNWIND [1, NULL, 2] AS i RETURN count(i) AS sum
返回代码的描述

查询包含一个跳过空值的聚合函数。

查询
UNWIND [1, NULL, 2] AS i RETURN count(i) AS sum
返回的 GQLSTATUS 代码

01G11

返回的状态描述

警告:在集合函数中消除了空值。

UNSUPPORTED 类别

当查询或命令尝试使用当前系统不支持的功能或使用不应在生产环境中使用的实验性功能时,将返回不支持的通知。

不支持的运行时

表 15. 通知详细信息

Neo4j 代码

Neo.ClientNotification.Statement.RuntimeUnsupportedWarning

标题

此查询不受所选运行时支持。

描述

此查询不支持所选的运行时,请使用不同的运行时或回退到默认运行时。(%s

类别

UNSUPPORTED

GQLSTATUS 代码

01N40

状态描述

警告:不支持的运行时。该查询无法使用{ $preparser_input1 }执行,使用{ $preparser_input2 }。原因:{ $msg }

分类

UNSUPPORTED

SeverityLevel

WARNING

示例 16. 运行时不受 Cypher 命令支持
查询
CYPHER runtime=pipelined SHOW INDEXES YIELD *
返回代码的描述

此查询不支持所选的运行时,请使用不同的运行时或回退到默认运行时。(Pipelined 尚未支持包括ShowIndexes在内的计划,请使用其他运行时。)

改进建议

使用不同的运行时或删除运行时选项以使用默认运行时运行查询

SHOW INDEXES YIELD *
查询
EXPLAIN CYPHER runtime=pipelined SHOW INDEXES YIELD *
返回的 GQLSTATUS 代码

01N40

返回的状态描述

警告:不支持的运行时。该查询无法使用runtime=pipelined执行,使用runtime=slotted。原因:Pipelined 尚未支持包括ShowIndexes在内的计划,请使用其他运行时。

改进建议

使用不同的运行时或删除运行时选项以使用默认运行时运行查询

SHOW INDEXES YIELD *

RuntimeExperimental

从 Neo4j 5.14 开始,此通知的使用已删除。

表 16. 通知详细信息

Neo4j 代码

Neo.ClientNotification.Statement.RuntimeExperimental

标题

此功能为实验性功能,不应在生产系统中使用。

描述

您正在使用实验性功能(%s

类别

UNSUPPORTED

SeverityLevel

WARNING

示例 17. 使用并行运行时
查询
CYPHER runtime=parallel MATCH (n) RETURN (n)
返回代码的描述

您正在使用实验性功能(并行运行时为实验性功能,可能存在不稳定性并可能存在正确性问题。)

改进建议

不应在生产环境中使用并行运行时。选择另一个运行时或删除选项以使用默认运行时

MATCH (n) RETURN (n)

DEPRECATION 通知

弃用通知包含有关已弃用功能或功能的信息。重要的是要更改为新的功能,否则,查询可能会在将来的版本中中断。

功能已弃用

表 17. 通知详细信息

Neo4j 代码

Neo.ClientNotification.Statement.FeatureDeprecationWarning

标题

此功能已弃用,将在未来的版本中删除。

描述

  • 该过程具有一个已弃用的字段。(%s

  • 该函数具有一个已弃用的字段。(%s

  • 在同一 CREATE 中创建实体(%s)并在属性定义中引用该实体已弃用。

  • 合并实体(%s)并在同一 MERGE 中的属性定义中引用该实体已弃用。

  • Unicode 字符%s已弃用,用于未转义的标识符,将来将被视为空格字符。要继续使用它,请通过在标识符%s周围添加反引号来转义标识符。

  • 具有 Unicode 表示形式%s的字符已弃用,用于未转义的标识符,将来将不再支持。要继续使用它,请通过在标识符%s周围添加反引号来转义标识符。

  • UNION [ALL] 中的所有子查询应为返回列使用相同的排序。在 UNION [ALL] 子句中使用不同排序的返回项已弃用,并将从未来的版本中删除。

  • 数据库和别名具有未转义的.已弃用,除非用于指示它们属于复合数据库。包含.的名称应转义。(%s

类别

DEPRECATION

GQLSTATUS 代码

01N00

状态描述

警告:功能已弃用。$msg

分类

DEPRECATION

SeverityLevel

WARNING

示例 18. 使用未转义的名称创建包含点的数据库
查询
CREATE DATABASE foo.bar
返回代码的描述

数据库和别名具有未转义的.已弃用,除非用于指示它们属于复合数据库。包含.的名称应转义。(名称:foo.bar

改进建议

如果不打算用于复合数据库,请使用字符`转义名称。

CREATE DATABASE `foo.bar`
查询
CREATE DATABASE foo.bar
返回的 GQLSTATUS 代码

01N00

返回的状态描述

警告:功能已弃用。数据库和别名具有未转义的.已弃用,除非用于指示它们属于复合数据库。包含.的名称应转义。(名称:foo.bar)

改进建议

如果不打算用于复合数据库,请使用字符`转义名称。

CREATE DATABASE `foo.bar`
示例 19. 在UNION 子句中使用不同排序的返回项
查询
RETURN 'val' as one, 'val' as two
UNION
RETURN 'val' as two, 'val' as one
返回代码的描述

UNION [ALL] 中的所有子查询应为返回列使用相同的排序。在 UNION [ALL] 子句中使用不同排序的返回项已弃用,并将从未来的版本中删除。

改进建议

在所有由UNION 子句组合的子查询中,为返回列使用相同的排序。

RETURN 'val' as one, 'val' as two
UNION
RETURN 'val' as one, 'val' as two
查询
RETURN 'val' as one, 'val' as two
UNION
RETURN 'val' as two, 'val' as one
返回的 GQLSTATUS 代码

01N00

返回的状态描述

警告:功能已弃用。UNION [ALL] 中的所有子查询应为返回列使用相同的排序。在 UNION [ALL] 子句中使用不同排序的返回项已弃用,并将从未来的版本中删除。

改进建议

在所有由UNION 子句组合的子查询中,为返回列使用相同的排序。

RETURN 'val' as one, 'val' as two
UNION
RETURN 'val' as one, 'val' as two
示例 20. 在未转义的标识符中使用 Unicode \u0085
查询
RETURN 1 as my\u0085identifier
返回代码的描述

Unicode 字符\u0085已弃用,用于未转义的标识符,将来将被视为空格字符。要继续使用它,请通过在标识符my\u0085identifier周围添加反引号来转义标识符。

查询
RETURN 1 as my\u0085identifier
返回的 GQLSTATUS 代码

01N00

返回的状态描述

警告:功能已弃用。Unicode 字符\u0085已弃用,用于未转义的标识符,将来将被视为空格字符。要继续使用它,请通过在标识符my\u0085identifier周围添加反引号来转义标识符。

具有替换的功能已弃用

表 18. 通知详细信息

Neo4j 代码

Neo.ClientNotification.Statement.FeatureDeprecationWarning

标题

此功能已弃用,将在未来的版本中删除。

描述

  • 在将来的版本中,在替代关系类型的分隔中使用冒号的语义将发生变化。(%s

  • 使用节点或关系设置属性已弃用,并将从未来的版本中删除。请改用 properties()。

  • 使用具有固定长度关系的 shortestPath 和 allShortestPaths 已弃用,并将从未来的版本中删除。请改用长度为 1 [r*1..1] 的路径或使用限制的 Match。

  • 该查询使用了已弃用的函数。(%s

  • 该查询使用了已弃用的过程。(%s

  • 该查询使用了已弃用的运行时选项。(%s

  • 用于文本索引的TextIndexProvider.DESCRIPTOR.name() 提供程序已弃用,并将从未来的版本中删除。请改用TrigramIndexProvider.DESCRIPTOR.name()

类别

DEPRECATION

GQLSTATUS 代码

01N01

状态描述

警告:具有替换的功能已弃用。{ $thing1 } 已弃用。它被{ $thing2 } 替换。

分类

DEPRECATION

SeverityLevel

WARNING

示例 21. 在关系模式中使用竖线后的冒号|:
查询
MATCH (a)-[:A|:B|:C]-() RETURN *
返回代码的描述

在将来的版本中,在替代关系类型的分隔中使用冒号的语义将发生变化。(请改用 ':A|B|C')

改进建议

删除关系类型表达式中的冒号。

MATCH (a)-[:A|B|C]-() RETURN *
查询
MATCH (a)-[:A|:B|:C]-() RETURN *
返回的 GQLSTATUS 代码

01N01

返回的状态描述

警告:具有替换的功能已弃用。:A|:B|:C 已弃用。它被:A|B|C 替换。

改进建议

删除关系类型表达式中的冒号。

MATCH (a)-[:A|B|C]-() RETURN *
示例 22. 使用节点设置属性
查询
MATCH (a)-[]-(b)
SET a = b
返回代码的描述

使用节点或关系设置属性已弃用,并将从未来的版本中删除。请改用properties()

改进建议

使用properties() 函数从b 获取所有属性。

MATCH (a)-[]-(b)
SET a = properties(b)
查询
MATCH (a)-[]-(b)
SET a = b
返回的 GQLSTATUS 代码

01N01

返回的状态描述

警告:具有替换的功能已弃用。SET a = b 已弃用。它被SET a = properties(b) 替换。

改进建议

使用properties() 函数从b 获取所有属性。

MATCH (a)-[]-(b)
SET a = properties(b)
示例 23. 使用关系设置属性
查询
MATCH (a)-[r]-(b)
SET a += r
返回代码的描述

使用节点或关系设置属性已弃用,并将从未来的版本中删除。请改用properties()

改进建议

使用properties() 函数从r 获取所有属性。

MATCH (a)-[r]-(b)
SET a += properties(r)
查询
MATCH (a)-[r]-(b)
SET a += r
返回的 GQLSTATUS 代码

01N01

返回的状态描述

警告:具有替换的功能已弃用。SET a += r 已弃用。它被SET a += properties(r) 替换。

改进建议

使用properties() 函数从r 获取所有属性。

MATCH (a)-[r]-(b)
SET a += properties(r)
示例 24. 使用固定关系长度的最短路径
查询
MATCH (a:Start), shortestPath((a)-[r]->()) RETURN a
返回代码的描述

使用具有固定长度关系的shortestPathallShortestPaths 已弃用,并将从未来的版本中删除。请改用长度为1 [r*1..1] 的路径或使用限制的 Match。

改进建议

如果关系长度是固定的,则没有理由搜索最短路径。相反,您可以将其重写为以下内容

MATCH (a: Start)-[r]->(b: End) RETURN b LIMIT 1
查询
MATCH (a:Start), shortestPath((a)-[r]->()) RETURN a
返回的 GQLSTATUS 代码

01N01

返回的状态描述

警告:具有替换的功能已弃用。shortestPath((a)-[r]→()) 已弃用。它被shortestPath((n)-[r*1..1]→(m)) 替换。

改进建议

如果关系长度是固定的,则没有理由搜索最短路径。相反,您可以将其重写为以下内容

MATCH (a: Start)-[r]->(b: End) RETURN b LIMIT 1
示例 25. 使用已弃用的运行时选项
查询
CYPHER runtime = interpreted MATCH (n) RETURN n
返回代码的描述

该查询使用了已弃用的运行时选项。('runtime=interpreted' 已弃用,请改用'runtime=slotted'

改进建议

运行时 interpreted 已被弃用,现已使用其他运行时。或者,您可以删除运行时选项以使用默认运行时。

MATCH (n) RETURN n
查询
CYPHER runtime = interpreted MATCH (n) RETURN n
返回的 GQLSTATUS 代码

01N01

返回的状态描述

警告:功能已弃用并有替代方案。runtime=interpreted 已被弃用。它被 runtime=slotted 替换。

改进建议

运行时 interpreted 已被弃用,现已使用其他运行时。或者,您可以删除运行时选项以使用默认运行时。

MATCH (n) RETURN n
示例 26. 在创建文本索引时使用 text-1.0 索引提供程序
查询
CREATE TEXT INDEX FOR (n:Label) ON (n.prop) OPTIONS {indexProvider : 'text-1.0'}
返回代码的描述

用于文本索引的 text-1.0 提供程序已弃用,将在未来的版本中删除。请改用 text-2.0

改进建议

使用值 text-2.0 更新选项 indexProvider

CREATE TEXT INDEX FOR (n:Label) ON (n.prop) OPTIONS {indexProvider : 'text-2.0'}
查询
CREATE TEXT INDEX FOR (n:Label) ON (n.prop) OPTIONS {indexProvider : 'text-1.0'}
返回的 GQLSTATUS 代码

01N01

返回的状态描述

警告:功能已弃用并有替代方案。text-1.0 已被弃用。它被 text-2.0 替换。

改进建议

使用值 text-2.0 更新选项 indexProvider

CREATE TEXT INDEX FOR (n:Label) ON (n.prop) OPTIONS {indexProvider : 'text-2.0'}
示例 27. 使用已重命名或已弃用的过程
CALL unsupported.dbms.shutdown
返回代码的描述

查询使用了已弃用的过程:'unsupported.dbms.shutdown'

改进建议

删除已弃用过程的使用。如果有建议的替代方案,请更新为使用替代方案。

CALL cdc.query
返回的 GQLSTATUS 代码

01N01

返回的状态描述

警告:功能已弃用并有替代方案。cdc.query 已被弃用。它被 db.cdc.query 替换。

CALL unsupported.dbms.shutdown
返回的 GQLSTATUS 代码

01N02

返回的状态描述

警告:功能已弃用且无替代方案。unsupported.dbms.shutdown 已被弃用,并将被删除且没有替代方案。

示例 28. 使用 id() 函数
查询
MATCH (a)
RETURN id(a)
返回代码的描述

查询使用了已弃用的函数:id

改进建议

改用 elementId() 函数。

MATCH (a)
RETURN elementId(a)
查询
MATCH (a)
RETURN id(a)
返回的 GQLSTATUS 代码

01N01

返回的状态描述

警告:功能已弃用并有替代方案。id 已被弃用。它被 elementId() 替换。

改进建议

改用 elementId() 函数。

MATCH (a)
RETURN elementId(a)
查询
MATCH (a)
RETURN id(a)
返回的 GQLSTATUS 代码

01N02

返回的状态描述

警告:功能已弃用且无替代方案。id 已被弃用,并将被删除且没有替代方案。

没有未来替代方案的已弃用功能

表 19. 通知详细信息

Neo4j 代码

Neo.ClientNotification.Statement.FeatureDeprecationWarning

标题

此功能已弃用,将在未来的版本中删除。

描述

  • Cypher 查询选项 connectComponentsPlanner 已被弃用,并将被删除且没有替代方案。产品在组合子计划时使用基于成本的 IDP 搜索算法的默认行为将被保留。有关更多信息,请参阅 Cypher 手册 → Cypher 计划程序。

  • 查询使用了已弃用的函数%s

  • 查询使用了已弃用的过程%s

类别

DEPRECATION

GQLSTATUS 代码

01N02

状态描述

警告:功能已弃用且无替代方案。{ $thing } 已被弃用,并将被删除且没有替代方案。

分类

DEPRECATION

SeverityLevel

WARNING

示例 29. 使用 Cypher 查询选项 connectComponentsPlanner
查询
CYPHER connectComponentsPlanner=greedy MATCH (a), (b) RETURN *
返回代码的描述

Cypher 查询选项 connectComponentsPlanner 已被弃用,并将被删除且没有替代方案。产品在组合子计划时使用基于成本的 IDP 搜索算法的默认行为将被保留。有关更多信息,请参阅 Cypher 手册 → Cypher 计划程序.

查询
CYPHER connectComponentsPlanner=greedy MATCH (a), (b) RETURN *
返回的 GQLSTATUS 代码

01N02

返回的状态描述

警告:功能已弃用且无替代方案。connectComponentsPlanner 已被弃用,并将被删除且没有替代方案。

过程字段已弃用

表 20. 通知详细信息

Neo4j 代码

Neo.ClientNotification.Statement.FeatureDeprecationWarning

标题

此功能已弃用,将在未来的版本中删除。

描述

查询使用了过程中的已弃用字段。(%s

类别

DEPRECATION

GQLSTATUS 代码

01N03

状态描述

警告:过程字段已弃用。{ $field } 用于过程 { $proc } 已被弃用。

分类

DEPRECATION

SeverityLevel

WARNING

功能已弃用并有替代方案 - DeprecatedFormat

表 21. 通知详细信息

Neo4j 代码

Neo.ClientNotification.Request.DeprecatedFormat

标题

客户端请求了已弃用的格式。

描述

请求的格式已被弃用。(%s

类别

DEPRECATION

GQLSTATUS 代码

01N01

状态描述

警告:具有替换的功能已弃用。{ $thing1 } 已弃用。它被{ $thing2 } 替换。

分类

DEPRECATION

SeverityLevel

WARNING

SECURITY 类别

安全通知表明查询或命令的结果可能存在潜在的安全问题。验证这是否是您查询或命令的预期行为。

角色或权限未分配

表 22. 通知详细信息

Neo4j 代码

Neo.ClientNotification.Security.CommandHasNoEffect

标题

<command> 无效。*

描述

  • 用户没有该角色。有关更多信息,请参阅状态码文档。

  • 该角色没有该权限。有关更多信息,请参阅状态码文档。

类别

SECURITY

GQLSTATUS 代码

00N71

状态描述

注意:成功完成 - 角色或权限未分配。{ $cmd } 无效。角色或权限未分配。

分类

SECURITY

SeverityLevel

INFORMATION

*<command>cmd 可以是用户提供的完整命令或提供的命令的子集。

示例 30. 从没有该角色的用户撤销角色
命令
REVOKE ROLE admin, reader FROM jane
返回代码的标题

REVOKE ROLE reader FROM jane 无效。

返回代码的描述

用户没有该角色。有关更多信息,请参阅状态码文档。

改进建议

验证这是否是预期的角色和用户。

命令
REVOKE ROLE admin, reader FROM jane
返回的 GQLSTATUS 代码

00N71

返回的状态描述

注意:成功完成 - 角色或权限未分配。REVOKE ROLE reader FROM jane 无效。角色或权限未分配。

改进建议

验证这是否是预期的角色和用户。

示例 31. 从没有该权限的角色撤销权限
命令
REVOKE WRITE ON GRAPH * FROM reader
返回代码的标题

REVOKE DENY WRITE ON GRAPH * FROM reader 无效。

返回代码的描述

该角色没有该权限。有关更多信息,请参阅状态码文档。

改进建议

验证这是否是预期的权限和角色。

命令
REVOKE WRITE ON GRAPH * FROM reader
返回的 GQLSTATUS 代码

00N71

返回的状态描述

注意:成功完成 - 角色或权限未分配。REVOKE DENY WRITE ON GRAPH * FROM reader 无效。角色或权限未分配。

改进建议

验证这是否是预期的权限和角色。

角色或权限已分配

表 23. 通知详细信息

Neo4j 代码

Neo.ClientNotification.Security.CommandHasNoEffect

标题

<command> 无效。*

描述

  • 用户已拥有该角色。有关更多信息,请参阅状态码文档。

  • 该角色已拥有该权限。有关更多信息,请参阅状态码文档。

类别

SECURITY

GQLSTATUS 代码

00N70

状态描述

注意:成功完成 - 角色或权限已分配。{ $cmd } 无效。角色或权限已分配。

分类

SECURITY

SeverityLevel

INFORMATION

*<command>cmd 可以是用户提供的完整命令或提供的命令的子集。

示例 32. 向已拥有该角色的用户授予角色
命令
GRANT ROLE admin TO john
返回代码的标题

GRANT ROLE admin TO john 无效。

返回代码的描述

用户已拥有该角色。有关更多信息,请参阅状态码文档。

改进建议

验证这是否是预期的角色和用户。

命令
GRANT ROLE admin TO john
返回的 GQLSTATUS 代码

00N70

返回的状态描述

注意:成功完成 - 角色或权限已分配。GRANT ROLE admin TO john 无效。角色或权限已分配。

改进建议

验证这是否是预期的角色和用户。

示例 33. 向已拥有该权限的角色授予或拒绝权限
命令
GRANT TRAVERSE ON GRAPH * TO reader
返回代码的标题

GRANT TRAVERSE ON GRAPH * NODE * TO reader 无效。

返回代码的描述

该角色已拥有该权限。有关更多信息,请参阅状态码文档。

改进建议

验证这是否是预期的权限和角色。

命令
GRANT TRAVERSE ON GRAPH * TO reader
返回的 GQLSTATUS 代码

00N70

返回的状态描述

注意:成功完成 - 角色或权限已分配。GRANT TRAVERSE ON GRAPH * TO reader 无效。角色或权限已分配。

改进建议

验证这是否是预期的权限和角色。

无法撤销命令

表 24. 通知详细信息

Neo4j 代码

Neo.ClientNotification.Security.ImpossibleRevokeCommand

标题

<command> 无效。*

描述

角色不存在。确保没有拼写错误。此通知将在未来的主要版本中变为错误。有关更多信息,请参阅状态码文档。

类别

SECURITY

GQLSTATUS 代码

01N70

状态描述

警告:无法撤销命令。cmd 无效。$msg 确保没有拼写错误。此通知将在未来的主要版本中变为错误。

分类

SECURITY

SeverityLevel

WARNING

*<command>cmd 可以是用户提供的完整命令或提供的命令的子集。

示例 34. 从用户撤销不存在的角色
命令
REVOKE ROLE manager, reader FROM jane
返回代码的标题

REVOKE ROLE manager FROM jane 无效。

返回代码的描述

角色不存在。确保没有拼写错误。此通知将在未来的主要版本中变为错误。有关更多信息,请参阅状态码文档。

改进建议

验证这是否是预期的角色,以及是否拼写正确。

命令
REVOKE ROLE manager, reader FROM jane
返回的 GQLSTATUS 代码

01N70

返回的状态描述

警告:无法撤销命令。REVOKE ROLE manager FROM jane 无效。角色不存在。确保没有拼写错误。此通知将在未来的主要版本中变为错误。

改进建议

验证这是否是预期的角色,以及是否拼写正确。

示例 35. 从不存在的用户撤销角色
命令
REVOKE ROLE reader FROM alice
返回代码的标题

REVOKE ROLE reader FROM alice 无效。

返回代码的描述

用户不存在。确保没有拼写错误。此通知将在未来的主要版本中变为错误。

改进建议

验证这是否是预期的用户,以及是否拼写正确。

命令
REVOKE ROLE reader FROM alice
返回的 GQLSTATUS 代码

01N70

返回的状态描述

警告:无法撤销命令。REVOKE ROLE reader FROM alice 无效。用户不存在。确保没有拼写错误。此通知将在未来的主要版本中变为错误。有关更多信息,请参阅状态码文档。o

改进建议

验证这是否是预期的用户,以及是否拼写正确。

示例 36. 从不存在的角色撤销权限
命令
REVOKE GRANT WRITE ON GRAPH * FROM manager
返回代码的标题

REVOKE GRANT WRITE ON GRAPH * FROM manager 无效。

返回代码的描述

角色不存在。确保没有拼写错误。此通知将在未来的主要版本中变为错误。有关更多信息,请参阅状态码文档。

改进建议

验证这是否是预期的角色,以及是否拼写正确。

命令
REVOKE GRANT WRITE ON GRAPH * FROM manager
返回的 GQLSTATUS 代码

01N70

返回的状态描述

警告:无法撤销命令。REVOKE GRANT WRITE ON GRAPH * FROM manager 无效。角色不存在。确保没有拼写错误。此通知将在未来的主要版本中变为错误。

改进建议

验证这是否是预期的角色,以及是否拼写正确。

示例 37. 从角色撤销对不存在的图的权限
命令
REVOKE GRANT WRITE ON GRAPH neo3j FROM editor
返回代码的标题

REVOKE GRANT WRITE ON GRAPH neo3j FROM editor 无效。

返回代码的描述

数据库 neo3j 不存在。确保没有拼写错误。此通知将在未来的主要版本中变为错误。有关更多信息,请参阅状态码文档。

改进建议

验证这是否是预期的图,以及是否拼写正确。

命令
REVOKE GRANT WRITE ON GRAPH neo3j FROM editor
返回的 GQLSTATUS 代码

01N70

返回的状态描述

警告:无法撤销命令。REVOKE GRANT WRITE ON GRAPH neo3j FROM editor 无效。数据库 neo3j 不存在。确保没有拼写错误。此通知将在未来的主要版本中变为错误。

改进建议

验证这是否是预期的图,以及是否拼写正确。

示例 38. 从角色撤销对不存在的数据库的权限
命令
REVOKE GRANT ACCESS ON DATABASE neo3j FROM editor
返回代码的标题

REVOKE GRANT ACCESS ON DATABASE neo3j FROM editor 无效。

返回代码的描述

数据库 neo3j 不存在。确保没有拼写错误。此通知将在未来的主要版本中变为错误。有关更多信息,请参阅状态码文档。

改进建议

验证这是否是预期的数据库,以及是否拼写正确。

命令
REVOKE GRANT ACCESS ON DATABASE neo3j FROM editor
返回的 GQLSTATUS 代码

01N70

返回的状态描述

警告:无法撤销命令。REVOKE GRANT ACCESS ON DATABASE neo3j FROM editor 无效。数据库 neo3j 不存在。确保没有拼写错误。此通知将在未来的主要版本中变为错误。

改进建议

验证这是否是预期的数据库,以及是否拼写正确。

示例 39. 从使用通配符图参数的角色撤销权限
参数
{
    "graph": "*"
}
命令
REVOKE GRANT CREATE ON GRAPH $graph FROM PUBLIC
返回代码的标题

REVOKE GRANT CREATE ON GRAPH $graph FROM PUBLIC 无效。

返回代码的描述

参数化数据库和图名称不支持通配符。确保没有拼写错误。此通知将在未来的主要版本中变为错误。有关更多信息,请参阅状态码文档。

改进建议

使用 GRAPH *(不带参数)撤销对所有图的权限。

参数
{
    "graph": "*"
}
命令
REVOKE GRANT CREATE ON GRAPH $graph FROM PUBLIC
返回的 GQLSTATUS 代码

01N70

返回的状态描述

警告:无法撤销命令。REVOKE GRANT CREATE ON GRAPH $graph FROM PUBLIC 无效。数据库 * 不存在。确保没有拼写错误。此通知将在未来的主要版本中变为错误。

改进建议

使用 GRAPH *(不带参数)撤销对所有图的权限。

示例 40. 从使用通配符数据库参数的角色撤销权限
参数
{
    "database": "*"
}
命令
REVOKE GRANT ACCESS ON DATABASE $database FROM PUBLIC
返回代码的标题

REVOKE GRANT ACCESS ON DATABASE $database FROM PUBLIC 无效。

返回代码的描述

参数化数据库和图名称不支持通配符。确保没有拼写错误。此通知将在未来的主要版本中变为错误。有关更多信息,请参阅状态码文档。

改进建议

使用 DATABASE *(不带参数)撤销对所有数据库的权限。

参数
{
    "database": "*"
}
命令
REVOKE GRANT ACCESS ON DATABASE $database FROM PUBLIC
返回的 GQLSTATUS 代码

01N70

返回的状态描述

警告:无法撤销命令。REVOKE GRANT ACCESS ON DATABASE $database FROM PUBLIC 无效。数据库 * 不存在。确保没有拼写错误。此通知将在未来的主要版本中变为错误。

改进建议

使用 DATABASE *(不带参数)撤销对所有数据库的权限。

AuthProviderNotDefined

表 25. 通知详细信息

Neo4j 代码

Neo.ClientNotification.Security.AuthProviderNotDefined

标题

身份验证提供程序未定义。

描述

身份验证提供程序 { $provider } 在配置中未定义。验证拼写是否正确,或者在配置中定义 { $provider }

类别

SECURITY

GQLSTATUS 代码

00N72

状态描述

注意:成功完成 - 未定义的身份验证提供程序。身份验证提供程序 { $auth } 在配置中未定义。验证拼写是否正确,或者在配置中定义 { $auth }。

分类

SECURITY

SeverityLevel

INFORMATION

示例 41. 使用配置中未定义的身份验证提供程序创建用户
命令
CREATE USER foo SET AUTH 'unknownProvider' { SET ID 'idString' }
返回代码的描述

身份验证提供程序 unknownProvider 在配置中未定义。验证拼写是否正确,或者在配置中定义 unknownProvider

改进建议

确保提供的提供程序正确,或者如果提供程序不正确,请替换它。如果提供程序正确,请确保在 dbms.security.authentication_providersdbms.security.authorization_providers 中的一个或两个中将其添加为已知身份验证提供程序。

命令
CREATE USER foo SET AUTH 'unknownProvider' { SET ID 'idString' }
返回的 GQLSTATUS 代码

00N72

返回的状态描述

注意:成功完成 - 未定义的身份验证提供程序。身份验证提供程序 unknownProvider 在配置中未定义。验证拼写是否正确,或者在配置中定义 unknownProvider

改进建议

确保提供的提供程序正确,或者如果提供程序不正确,请替换它。如果提供程序正确,请确保在 dbms.security.authentication_providersdbms.security.authorization_providers 中的一个或两个中将其添加为已知身份验证提供程序。

示例 42. 修改用户以添加配置中未定义的身份验证提供程序
命令
ALTER USER foo SET AUTH 'unknownProvider' { SET ID 'idString' }
返回代码的描述

身份验证提供程序 unknownProvider 在配置中未定义。验证拼写是否正确,或者在配置中定义 unknownProvider

改进建议

确保提供的提供程序正确,或者如果提供程序不正确,请替换它。如果提供程序正确,请确保在 dbms.security.authentication_providersdbms.security.authorization_providers 中的一个或两个中将其添加为已知身份验证提供程序。

命令
ALTER USER foo SET AUTH 'unknownProvider' { SET ID 'idString' }
返回的 GQLSTATUS 代码

00N72

返回的状态描述

注意:成功完成 - 未定义的身份验证提供程序。身份验证提供程序 unknownProvider 在配置中未定义。验证拼写是否正确,或者在配置中定义 unknownProvider

改进建议

确保提供的提供程序正确,或者如果提供程序不正确,请替换它。如果提供程序正确,请确保在 dbms.security.authentication_providersdbms.security.authorization_providers 中的一个或两个中将其添加为已知身份验证提供程序。

ExternalAuthNotEnabled

表 26. 通知详细信息

Neo4j 代码

Neo.ClientNotification.Security.ExternalAuthNotEnabled

标题

用户的外部身份验证未启用。

描述

使用设置 dbms.security.require_local_user 启用外部身份验证。

类别

SECURITY

GQLSTATUS 代码

01N71

状态描述

警告:外部身份验证已禁用。使用设置 'dbms.security.require_local_user' 启用外部身份验证。

分类

SECURITY

SeverityLevel

WARNING

示例 43. 当链接用户未启用时,使用外部身份验证提供程序创建用户
命令
CREATE USER foo SET AUTH 'exampleProvider' { SET ID 'idString' }
改进建议

通过 dbms.security.require_local_user 设置启用链接用户。在启用之前,新的外部身份验证将被忽略,当前的外部身份验证行为将继续适用。

命令
CREATE USER foo SET AUTH 'exampleProvider' { SET ID 'idString' }
返回的 GQLSTATUS 代码

01N71

返回的状态描述

警告:外部身份验证已禁用。使用设置 'dbms.security.require_local_user' 启用外部身份验证。

改进建议

通过 dbms.security.require_local_user 设置启用链接用户。在启用之前,新的外部身份验证将被忽略,当前的外部身份验证行为将继续适用。

示例 44. 当链接用户未启用时,修改用户以添加外部身份验证提供程序
命令
ALTER USER foo SET AUTH 'exampleProvider' { SET ID 'idString' }
改进建议

通过 dbms.security.require_local_user 设置启用链接用户。在启用之前,新的外部身份验证将被忽略,当前的外部身份验证行为将继续适用。

命令
ALTER USER foo SET AUTH 'exampleProvider' { SET ID 'idString' }
返回的 GQLSTATUS 代码

01N71

返回的状态描述

警告:外部身份验证已禁用。使用设置 'dbms.security.require_local_user' 启用外部身份验证。

改进建议

通过 dbms.security.require_local_user 设置启用链接用户。在启用之前,新的外部身份验证将被忽略,当前的外部身份验证行为将继续适用。

TOPOLOGY 类别

拓扑通知提供与管理数据库和服务器相关的其他信息。

服务器已启用

表 27. 通知详细信息

Neo4j 代码

Neo.ClientNotification.Cluster.ServerAlreadyEnabled

标题

<command> 无效。

描述

服务器 %s 已启用。请验证此服务器是否为目标服务器。

类别

TOPOLOGY

GQLSTATUS 代码

00N80

状态描述

注意:成功完成 - 服务器已启用。ENABLE SERVER 无效。服务器 { $server } 已启用。请验证此服务器是否为目标服务器。

分类

TOPOLOGY

SeverityLevel

INFORMATION

示例 45. 启用已启用的服务器
命令
ENABLE SERVER "123e4567-e89b-12d3-a456-426614174000"
返回代码的描述

服务器 123e4567-e89b-12d3-a456-426614174000 已启用。请验证此服务器是否为目标服务器。

命令
ENABLE SERVER "123e4567-e89b-12d3-a456-426614174000"
返回的 GQLSTATUS 代码

00N80

返回的状态描述

注意:成功完成 - 服务器已启用。ENABLE SERVER 无效。服务器 123e4567-e89b-12d3-a456-426614174000 已启用。请验证此服务器是否为目标服务器。

服务器已被隔离

表 28. 通知详细信息

Neo4j 代码

Neo.ClientNotification.Cluster.ServerAlreadyCordoned

标题

<command> 无效。

描述

服务器 %s 已被隔离。请验证此服务器是否为目标服务器。

类别

TOPOLOGY

GQLSTATUS 代码

00N81

状态描述

注意:成功完成 - 服务器已被隔离。CORDON SERVER 无效。服务器 { $server } 已被隔离。请验证此服务器是否为目标服务器。

分类

TOPOLOGY

SeverityLevel

INFORMATION

示例 46. 隔离已被隔离的服务器
命令
CORDON SERVER "123e4567-e89b-12d3-a456-426614174000"
返回代码的描述

服务器 123e4567-e89b-12d3-a456-426614174000 已被隔离。请验证此服务器是否为目标服务器。

命令
CORDON SERVER "123e4567-e89b-12d3-a456-426614174000"
返回的 GQLSTATUS 代码

00N81

返回的状态描述

注意:成功完成 - 服务器已被隔离。CORDON SERVER 无效。服务器 123e4567-e89b-12d3-a456-426614174000 已被隔离。请验证此服务器是否为目标服务器。

没有重新分配数据库

表 29. 通知详细信息

Neo4j 代码

Neo.ClientNotification.Cluster.NoDatabasesReallocated

标题

<command> 无效。

描述

没有重新分配数据库。目前没有更好的分配方案。

类别

TOPOLOGY

GQLSTATUS 代码

00N82

状态描述

注意:成功完成 - 没有重新分配数据库。REALLOCATE DATABASES 无效。没有重新分配数据库。目前没有更好的分配方案。

分类

TOPOLOGY

SeverityLevel

INFORMATION

示例 47. 重新分配数据库未导致分配更改
命令
REALLOCATE DATABASES
返回代码的描述

没有重新分配数据库。目前没有更好的分配方案。

示例场景

场景 1: 集群已平衡。例如,当有三个服务器时,每个服务器都托管着数据库 foobar,这意味着所有数据库都分配给所有服务器。

场景 2: 集群看起来不平衡,但服务器约束阻止您迁移到更好、更平衡的分配方案。例如,假设服务器 1 托管数据库 foobar,服务器 2 仅托管 foo,服务器 3 未托管任何数据库。那么,更好的分配方案将从服务器 1 将 foo 迁移到服务器 3,但如果服务器 3 有约束 deniedDatabases:['foo']},那么在该约束下,集群已平衡。

命令
REALLOCATE DATABASES
返回的 GQLSTATUS 代码

00N82

返回的状态描述

注意:成功完成 - 没有重新分配数据库。REALLOCATE DATABASES 无效。没有重新分配数据库。目前没有更好的分配方案。

示例场景

场景 1: 集群已平衡。例如,当有三个服务器时,每个服务器都托管着数据库 foobar,这意味着所有数据库都分配给所有服务器。

场景 2: 集群看起来不平衡,但服务器约束阻止您迁移到更好、更平衡的分配方案。例如,假设服务器 1 托管数据库 foobar,服务器 2 仅托管 foo,服务器 3 未托管任何数据库。那么,更好的分配方案将从服务器 1 将 foo 迁移到服务器 3,但如果服务器 3 有约束 deniedDatabases:['foo']},那么在该约束下,集群已平衡。

分配期间存在隔离的服务器

当 Cypher 管理命令触发分配决策并且某些服务器处于隔离状态时,将返回此通知。例如,CREATE DATABASEALTER DATABASEDEALLOCATE DATABASES FROM SERVER[S]ALTER DATABASE 会返回此通知。但是,REALLOCATE DATABASES 需要确保不存在任何隔离的服务器,因此不会返回此通知。

表 30. 通知详细信息

Neo4j 代码

Neo.ClientNotification.Cluster.CordonedServersExistedDuringAllocation

标题

在进行分配决策时,存在隔离的服务器。

描述

服务器 %s 处于隔离状态。这可能会影响分配决策。

类别

TOPOLOGY

GQLSTATUS 代码

00N83

状态描述

注意:成功完成 - 分配期间存在隔离的服务器。在进行分配决策时,存在隔离的服务器。服务器 { $server_list } 处于隔离状态。这可能会影响分配决策。

分类

TOPOLOGY

SeverityLevel

INFORMATION

示例 48. 分配决策期间存在隔离的服务器

此示例假设您有一个包含三个服务器的集群,其中服务器 123e4567-e89b-12d3-a456-426614174000 使用 dbms.cluster.cordonServer 过程处于隔离状态。然后,以下命令将返回此通知。

命令
CREATE DATABASE foo TOPOLOGY 2 PRIMARIES
返回代码的描述

服务器 123e4567-e89b-12d3-a456-426614174000 处于隔离状态。这可能会影响分配决策。

此示例假设您有一个包含三个服务器的集群,其中服务器 123e4567-e89b-12d3-a456-426614174000 使用 dbms.cluster.cordonServer 过程处于隔离状态。然后,以下命令将返回此通知。

命令
CREATE DATABASE foo TOPOLOGY 2 PRIMARIES
返回的 GQLSTATUS 代码

00N83

返回的状态描述

注意:成功完成 - 分配期间存在隔离的服务器。在进行分配决策时,存在隔离的服务器。服务器 123e4567-e89b-12d3-a456-426614174000 处于隔离状态。这可能会影响分配决策。

请求的拓扑与当前拓扑匹配

表 31. 通知详细信息

Neo4j 代码

Neo.ClientNotification.Cluster.RequestedTopologyMatchedCurrentTopology

标题

<command> 无效。

描述

请求的拓扑与当前拓扑匹配。没有更改分配。

类别

TOPOLOGY

GQLSTATUS 代码

00N84

状态描述

注意:成功完成 - 请求的拓扑与当前拓扑匹配。ALTER DATABASE 无效。请求的拓扑与当前拓扑匹配。没有更改分配。

分类

TOPOLOGY

SeverityLevel

INFORMATION

示例 49. 请求的拓扑与当前拓扑匹配

此示例假设您有一个包含三个服务器的集群,以及一个拓扑为两个主服务器和一个从服务器的数据库 foo

命令
ALTER DATABASE foo SET TOPOLOGY 2 PRIMARIES 1 SECONDARY
返回代码的描述

请求的拓扑与当前拓扑匹配。没有更改分配。

此示例假设您有一个包含三个服务器的集群,以及一个拓扑为两个主服务器和一个从服务器的数据库 foo

命令
ALTER DATABASE foo SET TOPOLOGY 2 PRIMARIES 1 SECONDARY
返回的 GQLSTATUS 代码

00N84

返回的状态描述

注意:成功完成 - 请求的拓扑与当前拓扑匹配。ALTER DATABASE 无效。请求的拓扑与当前拓扑匹配。没有更改分配。

SCHEMA 类别

模式通知提供与索引和约束相关的其他信息。

索引或约束已存在

表 32. 通知详细信息

Neo4j 代码

Neo.ClientNotification.Schema.IndexOrConstraintAlreadyExists

标题

<command> 无效。

描述

<conflicting> 已存在。

描述

%s 已存在。

类别

SCHEMA

GQLSTATUS 代码

00NA0

状态描述

注意:成功完成 - 索引或约束已存在。{ $cmd } 无效。{ $index_constr_pat } 已存在。

SeverityLevel

INFORMATION

*<command>cmd 可以是用户提供的完整命令或提供的命令的子集。

示例 50. 当等效索引已存在时创建索引

给定一个在 (:Label {property}) 上名为 existingRangeIndex 的范围索引。

命令
CREATE INDEX labelProperyRangeIndex IF NOT EXISTS FOR (n:Label) ON (n.property)
返回代码的标题

CREATE RANGE INDEX labelProperyRangeIndex IF NOT EXISTS FOR (e:Label) ON (e.property) 无效。

返回代码的完整描述

RANGE INDEX existingRangeIndex FOR (e:Label) ON (e.property) 已存在。

给定一个在 (:Label {property}) 上名为 existingRangeIndex 的范围索引。

命令
CREATE INDEX labelProperyRangeIndex IF NOT EXISTS FOR (n:Label) ON (n.property)
返回的 GQLSTATUS 代码

00NA0

返回的状态描述

注意:成功完成 - 索引或约束已存在。CREATE RANGE INDEX labelProperyRangeIndex IF NOT EXISTS FOR (e:Label) ON (e.property) 无效。RANGE INDEX existingRangeIndex FOR (e:Label) ON (e.property) 已存在。

示例 51. 当使用该名称的其他无关索引已存在时创建索引

给定一个在 (:Label {property}) 上名为 myIndex 的范围索引。

命令
CREATE TEXT INDEX myIndex IF NOT EXISTS FOR ()-[r:REL_TYPE]-() ON (r.property)
返回代码的标题

CREATE TEXT INDEX myIndex IF NOT EXISTS FOR ()-[e:REL_TYPE]-() ON (e.property) 无效。

返回代码的完整描述

RANGE INDEX myIndex FOR (e:Label) ON (e.property) 已存在。

改进建议

选择新索引的不同名称并重试。

CREATE TEXT INDEX myIndex2 IF NOT EXISTS FOR ()-[r:REL_TYPE]-() ON (r.property)

给定一个在 (:Label {property}) 上名为 myIndex 的范围索引。

命令
CREATE TEXT INDEX myIndex IF NOT EXISTS FOR ()-[r:REL_TYPE]-() ON (r.property)
返回的 GQLSTATUS 代码

00NA0

返回的状态描述

注意:成功完成 - 索引或约束已存在。CREATE TEXT INDEX myIndex IF NOT EXISTS FOR ()-[e:REL_TYPE]-() ON (e.property) 无效。RANGE INDEX myIndex FOR (e:Label) ON (e.property) 已存在。

改进建议

选择新索引的不同名称并重试。

CREATE TEXT INDEX myIndex2 IF NOT EXISTS FOR ()-[r:REL_TYPE]-() ON (r.property)
示例 52. 当相同约束已存在时创建约束

给定一个在 (:Label {property}) 上名为 nodeKeyLabelPropertyConstraint 的节点键约束。

命令
CREATE CONSTRAINT nodeKeyLabelPropertyConstraint IF NOT EXISTS FOR (n:Label) REQUIRE (n.property) IS NODE KEY
返回代码的标题

CREATE CONSTRAINT nodeKeyLabelPropertyConstraint IF NOT EXISTS FOR (e:Label) REQUIRE (e.property) IS NODE KEY 无效。

返回代码的完整描述

CONSTRAINT nodeKeyLabelPropertyConstraint FOR (e:Label) REQUIRE (e.property) IS NODE KEY 已存在。

给定一个在 (:Label {property}) 上名为 nodeKeyLabelPropertyConstraint 的节点键约束。

命令
CREATE CONSTRAINT nodeKeyLabelPropertyConstraint IF NOT EXISTS FOR (n:Label) REQUIRE (n.property) IS NODE KEY
返回的 GQLSTATUS 代码

00NA0

返回的状态描述

注意:成功完成 - 索引或约束已存在。CREATE CONSTRAINT nodeKeyLabelPropertyConstraint IF NOT EXISTS FOR (e:Label) REQUIRE (e.property) IS NODE KEY 无效。CONSTRAINT nodeKeyLabelPropertyConstraint FOR (e:Label) REQUIRE (e.property) IS NODE KEY 已存在。

示例 53. 当使用该名称的其他无关约束已存在时创建约束

给定一个在 (:Label {property}) 上名为 myConstraint 的节点键约束。

命令
CREATE CONSTRAINT myConstraint IF NOT EXISTS FOR (n:Label2) REQUIRE (n.property2) IS NOT NULL
返回代码的标题

CREATE CONSTRAINT myConstraint IF NOT EXISTS FOR (e:Label2) REQUIRE (e.property2) IS NOT NULL 无效。

返回代码的完整描述

CONSTRAINT myConstraint FOR (e:Label) REQUIRE (e.property) IS NODE KEY 已存在。

改进建议

选择新约束的不同名称并重试。

CREATE CONSTRAINT myConstraint2 IF NOT EXISTS FOR (n:Label2) REQUIRE (n.property2) IS NOT NULL

给定一个在 (:Label {property}) 上名为 myConstraint 的节点键约束。

命令
CREATE CONSTRAINT myConstraint IF NOT EXISTS FOR (n:Label2) REQUIRE (n.property2) IS NOT NULL
返回的 GQLSTATUS 代码

00NA0

返回的状态描述

注意:成功完成 - 索引或约束已存在。CREATE CONSTRAINT myConstraint IF NOT EXISTS FOR (e:Label2) REQUIRE (e.property2) IS NOT NULL 无效。CONSTRAINT myConstraint FOR (e:Label) REQUIRE (e.property) IS NODE KEY 已存在。

改进建议

选择新约束的不同名称并重试。

CREATE CONSTRAINT myConstraint2 IF NOT EXISTS FOR (n:Label2) REQUIRE (n.property2) IS NOT NULL

索引或约束不存在

表 33. 通知详细信息

Neo4j 代码

Neo.ClientNotification.Schema.IndexOrConstraintDoesNotExist

标题

<command> 无效。

描述

%s 不存在。

类别

SCHEMA

GQLSTATUS 代码

00NA1

状态描述

注意:成功完成 - 索引或约束不存在。{ $cmd } 无效。{ $index_constr_name } 不存在。

SeverityLevel

INFORMATION

示例 54. 尝试删除不存在的索引
命令
DROP INDEX nonExistingIndex IF EXISTS
返回代码的标题

DROP INDEX nonExistingIndex IF EXISTS 无效。

返回代码的完整描述

nonExistingIndex 不存在。

改进建议

请验证此索引是否为目标索引,以及是否拼写正确。

命令
DROP INDEX nonExistingIndex IF EXISTS
返回的 GQLSTATUS 代码

00NA1

返回的状态描述

注意:成功完成 - 索引或约束不存在。DROP INDEX nonExistingIndex IF EXISTS 无效。nonExistingIndex 不存在。

改进建议

请验证此索引是否为目标索引,以及是否拼写正确。

示例 55. 尝试删除不存在的约束
命令
DROP CONSTRAINT nonExistingConstraint IF EXISTS
返回代码的标题

DROP CONSTRAINT nonExistingConstraint IF EXISTS 无效。

返回代码的完整描述

nonExistingConstraint 不存在。

改进建议

请验证此约束是否为目标约束,以及是否拼写正确。

命令
DROP CONSTRAINT nonExistingConstraint IF EXISTS
返回的 GQLSTATUS 代码

00NA1

返回的状态描述

注意:成功完成 - 索引或约束不存在。DROP CONSTRAINT nonExistingConstraint IF EXISTS 无效。nonExistingConstraint 不存在。

改进建议

请验证此约束是否为目标约束,以及是否拼写正确。

GENERIC 通知

GENERIC 通知代码不属于任何更广泛的类别,并且彼此之间没有关联。

子查询变量遮蔽

表 34. 通知详细信息

Neo4j 代码

Neo.ClientNotification.Statement.SubqueryVariableShadowing

标题

子查询中的变量正在遮蔽外部作用域中具有相同名称的变量。

描述

子查询中的变量正在遮蔽外部作用域中具有相同名称的变量。如果您希望使用该变量,则必须使用导入 WITH 子句将其导入子查询。(%s

类别

GENERIC

GQLSTATUS 代码

03N60

状态描述

信息:子查询变量遮蔽。子查询中的变量 { $var } 使用与外部查询中的变量相同的名称。在子查询中使用 WITH $var 导入外部作用域中的变量,除非您希望它成为新的变量。

分类

GENERIC

SeverityLevel

INFORMATION

示例 56. 遮蔽外部作用域中的变量
查询
MATCH (n)
CALL {
  MATCH (n)--(m)
  RETURN m
}
RETURN *
返回代码的描述

子查询中的变量正在遮蔽外部作用域中具有相同名称的变量。如果您希望使用该变量,则必须使用导入 WITH 子句将其导入子查询。(遮蔽变量为:n

改进建议

如果查询的预期行为是子查询中的变量是一个新变量,那么不需要做任何操作。如果预期行为是使用外部查询中的变量,则需要使用WITH子句将其导入子查询。

MATCH (n)
CALL {
  WITH n
  MATCH (n)--(m)
  RETURN m
}
RETURN *
查询
MATCH (n)
CALL {
  MATCH (n)--(m)
  RETURN m
}
RETURN *
返回的 GQLSTATUS 代码

03N60

返回的状态描述

info: 子查询变量遮蔽。子查询中的变量n与外部查询中的变量同名。除非您想将其作为新变量,否则请在子查询中使用WITH n导入外部作用域中的变量。

改进建议

如果查询的预期行为是子查询中的变量是一个新变量,那么不需要做任何操作。如果预期行为是使用外部查询中的变量,则需要使用WITH子句将其导入子查询。

MATCH (n)
CALL {
  WITH n
  MATCH (n)--(m)
  RETURN m
}
RETURN *

冗余的可选过程

表 35. 通知详细信息

Neo4j 代码

Neo.ClientNotification.Statement.RedundantOptionalProcedure

标题

当过程调用 void 过程时,使用OPTIONAL是冗余的。

描述

使用OPTIONAL是冗余的,因为CALL %s是一个 void 过程。

类别

GENERIC

GQLSTATUS 代码

03N61

状态描述

info: 冗余的可选过程。使用OPTIONAL是冗余的,因为CALL %s是一个 void 过程。

分类

GENERIC

SeverityLevel

INFORMATION

示例 57. 在过程调用中冗余使用OPTIONAL
查询
OPTIONAL CALL db.createLabel("A")
返回代码的描述

使用OPTIONAL是冗余的,因为CALL db.createLabel是一个 void 过程。

改进建议

如果查询的预期行为是使用 void 过程,则可以删除OPTIONAL关键字而不会影响查询。

CALL db.createLabel("A")
查询
OPTIONAL CALL db.createLabel("A")
返回的 GQLSTATUS 代码

03N61

返回的状态描述

info: 冗余的可选过程。使用OPTIONAL是冗余的,因为CALL db.createLabel是一个 void 过程。

改进建议

如果查询的预期行为是使用 void 过程,则可以删除OPTIONAL关键字而不会影响查询。

CALL db.createLabel("A")

冗余的可选子查询

表 36. 通知详细信息

Neo4j 代码

Neo.ClientNotification.Statement.RedundantOptionalSubquery

标题

CALL是单元子查询时,使用OPTIONAL是冗余的。

描述

使用OPTIONAL是冗余的,因为CALL是单元子查询。

类别

GENERIC

GQLSTATUS 代码

03N62

状态描述

info: 冗余的可选子查询。使用OPTIONAL是冗余的,因为CALL是单元子查询。

分类

GENERIC

SeverityLevel

INFORMATION

示例 58. 在CALL子查询中冗余使用OPTIONAL
查询
UNWIND [1, 2, 3] AS x
OPTIONAL CALL (x) {
   CREATE({i:x})
}
返回代码的描述

对于单元子查询,可选是冗余的。在单元子查询上使用OPTIONAL没有任何影响,可以删除。

改进建议

如果查询的预期行为是子查询不返回任何值,则可以删除OPTIONAL关键字而不会影响查询。

UNWIND [1, 2, 3] AS x
CALL (x) {
   CREATE({i:x})
}
查询
UNWIND [1, 2, 3] AS x
OPTIONAL CALL (x) {
   CREATE({i:x})
}
返回的 GQLSTATUS 代码

03N62

返回代码的描述

info: 冗余的可选子查询。使用OPTIONAL是冗余的,因为CALL是单元子查询。

改进建议

如果查询的预期行为是子查询不返回任何值,则可以删除OPTIONAL关键字而不会影响查询。

UNWIND [1, 2, 3] AS x
CALL (x) {
   CREATE({i:x})
}

缺少参数

表 37. 通知详细信息

Neo4j 代码

Neo.ClientNotification.Statement.ParameterNotProvided

标题

语句引用了请求中未提供的参数。

描述

未向查询提供足够的参数。生成的查询计划不会被缓存,并且在没有 EXPLAIN 的情况下无法执行。(%s

类别

GENERIC

GQLSTATUS 代码

01N60

状态描述

warn: 缺少参数。由于未定义的参数{ $param_list },查询计划无法缓存,并且在没有EXPLAIN的情况下无法执行。请提供参数。

分类

GENERIC

SeverityLevel

WARNING

示例 59. 使用带有参数但未提供参数的EXPLAIN查询
查询
EXPLAIN WITH $param as param
RETURN param
返回代码的描述

未向查询提供足够的参数。生成的查询计划不会被缓存,并且在没有EXPLAIN的情况下无法执行。(缺少参数:param

改进建议

提供参数才能缓存计划。

查询
EXPLAIN WITH $param as param
RETURN param
返回的 GQLSTATUS 代码

01N60

返回的状态描述

warn: 缺少参数。由于未定义的参数{ $param },查询计划无法缓存,并且在没有EXPLAIN的情况下无法执行。请提供参数。

改进建议

提供参数才能缓存计划。

过程或函数执行警告

表 38. 通知详细信息

Neo4j 代码

Neo.ClientNotification.Procedure.ProcedureWarning

标题

查询使用了生成警告的过程。

描述

查询使用了生成警告的过程。(%s

类别

GENERIC

GQLSTATUS 代码

01N62

状态描述

warn: 过程执行警告。过程{ $proc }生成警告{ $msg }

分类

GENERIC

SeverityLevel

WARNING

无法满足的关系类型表达式

当匹配无法满足的关系类型表达式时,例如请求零个、多个或矛盾的类型。

表 39. 通知类别详细信息

Neo4j 代码

Neo.ClientNotification.Statement.UnsatisfiableRelationshipTypeExpression

标题

查询包含一个无法满足的关系类型表达式。

描述

关系类型表达式不可能满足。(%s

类别

GENERIC

GQLSTATUS 代码

01N61

状态描述

warn: 无法满足的关系类型表达式。表达式{ $label_expr }无法满足,因为关系必须恰好具有一个类型。

分类

GENERIC

SeverityLevel

WARNING

示例 60. 匹配无法满足的关系类型表达式
查询
MATCH ()-[r:R1&R2]->() RETURN r
返回代码的描述

关系类型表达式不可能满足。(R1&R2永远不会被任何关系满足。关系必须恰好具有一个类型。)

查询
MATCH ()-[r:R1&R2]->() RETURN r
返回的 GQLSTATUS 代码

01N61

返回的状态描述

warn: 无法满足的关系类型表达式。表达式R1&R2无法满足,因为关系必须恰好具有一个类型。

重复的关系引用

表 40. 通知类别详细信息

Neo4j 代码

Neo.ClientNotification.Statement.RepeatedRelationshipReference

标题

查询不返回任何结果,因为关系变量被绑定了多次。

描述

  • 查询中多次引用了关系,这导致没有结果,因为关系在每个结果中不能出现多次。(%s

  • 变量长度关系变量被绑定了多次,这导致没有结果,因为关系在每个结果中不能出现多次。(%s

类别

GENERIC

GQLSTATUS 代码

01N63

状态描述

warn: 重复的关系引用。{ $var }{ $pat }中重复,这导致没有结果。

分类

GENERIC

SeverityLevel

WARNING

示例 61. 多次绑定关系变量
查询
MATCH (:A)-[r]->(), ()-[r]->(:B) RETURN r
返回代码的描述

查询中多次引用了关系,这导致没有结果,因为关系在每个结果中不能出现多次。(关系r重复了)

改进建议

使用一个模式匹配所有以标签A的节点开始并以标签B的节点结束的关系。

MATCH (:A)-[r]->(:B) RETURN r
查询
MATCH (:A)-[r]->(), ()-[r]->(:B) RETURN r
返回的 GQLSTATUS 代码

01N63

返回的状态描述

warn: 重复的关系引用。r(:A)-[r]→(), ()-[r]→(:B)中重复,这导致没有结果。

改进建议

使用一个模式匹配所有以标签A的节点开始并以标签B的节点结束的关系。

MATCH (:A)-[r]->(:B) RETURN r
示例 62. 多次绑定变量长度关系变量(在 5.6 或更高版本上运行时)
查询
MATCH ()-[r*]->()<-[r*]-() RETURN count(*) AS count
返回代码的描述

变量长度关系变量被绑定了多次,这导致没有结果,因为关系在每个结果中不能出现多次。(关系 r 重复了)

查询
MATCH ()-[r*]->()<-[r*]-() RETURN count(*) AS count
返回的 GQLSTATUS 代码

01N63

返回的状态描述

warn: 重复的关系引用。r()-[r*]→()←[r*]-()中重复,这导致没有结果。