通知代码列表

以下页面提供了 Neo4j 中所有通知的概述,包括 GQLSTATUS 代码和 Neo4j 代码,以及一些场景及其可能的解决方案。

请注意,虽然 GQLSTATUS 代码保持稳定(任何更改都将是破坏性的),但与这些代码关联的状态描述的更改是非破坏性的,可能随时发生。因此,不建议解析状态描述或将其合并到脚本中。

PERFORMANCE 通知

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

笛卡尔积

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

表 1. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.CartesianProduct

标题

此查询在不相连的模式之间构建笛卡尔积。

描述

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

类别

PERFORMANCE

GQLSTATUS 代码

03N90

状态描述

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

分类

PERFORMANCE

严重程度

INFORMATION

示例 1. 包含许多不相连模式的查询
查询
MATCH (c:Child), (p:Parent) RETURN c, p
返回的 GQLSTATUS 代码

03N90

返回的状态描述

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

改进建议

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

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

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

改进建议

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

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

无界可变长度模式

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

表 2. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.UnboundedVariableLengthPattern

标题

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

描述

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

类别

PERFORMANCE

GQLSTATUS 代码

03N91

状态描述

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

分类

PERFORMANCE

严重程度

INFORMATION

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

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

改进建议

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

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

穷举最短路径

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

表 3. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.ExhaustiveShortestPath

标题

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

描述

使用带有穷举搜索回退的最短路径可能会导致查询变慢,因为最短路径图算法可能不适用于此用例。建议引入 WITH 来将包含最短路径的 MATCH 与该路径上的存在谓词分开。

类别

PERFORMANCE

GQLSTATUS 代码

03N92

状态描述

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

分类

PERFORMANCE

严重程度

INFORMATION

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

使用带有穷举搜索回退的最短路径可能会导致查询变慢,因为最短路径图算法可能不适用于此用例。建议引入 WITH 来将包含最短路径的 MATCH 与该路径上的存在谓词分开。

改进建议

MATCH 子句后引入 WITH 以分隔谓词。

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

无适用索引

当使用 LOAD CSV 配合 MATCHMERGE 子句匹配未索引的标签时,会返回此通知。这在大数据集上可能性能不佳。添加索引可以提高查询速度。

表 4. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.NoApplicableIndex

标题

添加架构索引可能会加快此查询速度。

描述

LOAD CSV 之后使用 MATCHMERGE 匹配未索引的标签很可能在大数据集上性能不佳。请考虑使用架构索引。

类别

PERFORMANCE

GQLSTATUS 代码

03N93

状态描述

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

分类

PERFORMANCE

严重程度

INFORMATION

示例 4. LOAD CSV 配合 MATCHMERGE
查询
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)
查询
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)

Eager 运算符

当查询的执行计划包含 Eager 运算符时,会返回此通知。

表 5. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.EagerOperator

标题

此查询的执行计划包含 Eager 运算符,这会强制所有依赖数据在继续之前在主内存中具象化。

描述

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

类别

PERFORMANCE

GQLSTATUS 代码

03N94

状态描述

info: eager 运算符。查询执行计划包含 Eager 运算符。LOAD CSVEager 结合使用会消耗大量内存。

分类

PERFORMANCE

严重程度

INFORMATION

示例 5. LOAD CSV 配合 Eager 运算符
查询
LOAD CSV FROM 'file:///ignore/ignore.csv' AS line MATCH (n:Person{name:line[0]}) DELETE n RETURN line
返回的 GQLSTATUS 代码

03N94

返回的状态描述

info: eager 运算符。查询执行计划包含 Eager 运算符。LOAD CSVEager 结合使用会消耗大量内存。

改进建议

有关更多信息以及如何避免问题的提示,请参阅 Cypher 手册 → Eager 运算符。在此特定情况下,查询可以重写为以下内容

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

LOAD CSV 和 Eager 运算符一起使用会占用大量内存。

查询
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 手册 → Eager 运算符。在此特定情况下,查询可以重写为以下内容

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: 动态属性。标签/类型 { $labelList } 上存在索引。动态属性无法使用索引。请考虑使用静态属性。

分类

PERFORMANCE

严重程度

INFORMATION

示例 6. 动态节点属性键导致无法使用索引
查询
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;
查询
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;
示例 7. 动态关系属性键导致无法使用索引
查询
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
查询
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

代码生成失败

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

表 7. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.CodeGenerationFailed

标题

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

描述

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

类别

PERFORMANCE

GQLSTATUS 代码

03N96

状态描述

info: 代码生成失败。无法生成代码,回退到解释型 { $cfgSetting } 引擎。堆栈跟踪可在 debug.log 中找到。原因:{ $cause }

分类

PERFORMANCE

严重程度

INFORMATION

HINT 通知

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

Join 提示无法满足

表 8. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.JoinHintUnfulfillableWarning

标题

数据库无法规划带提示的 join。

描述

带提示的 join 未能规划。这可能是因为生成的计划中不包含 join 键,请尝试使用不同的 join 键或重构您的查询。(%s)

类别

HINT

GQLSTATUS 代码

01N30

状态描述

warn: join 提示无法满足。无法使用 JOIN ON { $variableList } 创建计划。尝试更改 join 键或重构您的查询。

分类

HINT

严重程度

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 *
返回的 GQLSTATUS 代码

01N30

返回的状态描述

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

改进建议

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

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

带提示的 join 未能规划。这可能是因为生成的计划中不包含 join 键,请尝试使用不同的 join 键或重构您的查询。(带提示的 join 键标识符为:a

改进建议

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

提示的索引未找到

表 9. 通知详情

Neo4j 代码

Neo.ClientNotification.Schema.HintedIndexNotFound

标题

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

描述

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

类别

HINT

GQLSTATUS 代码

01N31

状态描述

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

分类

HINT

严重程度

WARNING

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

01N31

返回的状态描述

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

改进建议

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

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

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

改进建议

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

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

01N31

返回的状态描述

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

改进建议

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

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

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

改进建议

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

UNRECOGNIZED 通知

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

主数据库未找到

表 10. 通知详情

Neo4j 代码

Neo.ClientNotification.Database.HomeDatabaseNotFound

标题

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

描述

提供的主数据库当前在 DBMS 中不存在。此命令直到此数据库创建后才能生效。(%s)

类别

UNRECOGNIZED

GQLSTATUS 代码

00N50

状态描述

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

分类

UNRECOGNIZED

严重程度

INFORMATION

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

00N50

返回的状态描述

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

改进建议

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

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

提供的主数据库当前在 DBMS 中不存在。此命令直到此数据库创建后才能生效。(主数据库:nej4

改进建议

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

未知标签

表 11. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.UnknownLabelWarning

标题

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

描述

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

类别

UNRECOGNIZED

GQLSTATUS 代码

01N50

状态描述

warn: 未知标签。标签 { $label } 不存在于数据库 { $db } 中。验证拼写是否正确。

分类

UNRECOGNIZED

严重程度

WARNING

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

01N50

返回的状态描述

warn: 未知标签。标签 Perso 不存在于数据库 neo4j 中。验证拼写是否正确。

改进建议

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

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

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

改进建议

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

未知关系类型

表 12. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.UnknownRelationshipTypeWarning

标题

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

描述

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

类别

UNRECOGNIZED

GQLSTATUS 代码

01N51

状态描述

warn: 未知关系类型。关系类型 { $relType } 不存在于数据库 { $db } 中。验证拼写是否正确。

分类

UNRECOGNIZED

严重程度

WARNING

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

01N51

返回的状态描述

warn: 未知关系类型。关系类型 NonExistingType 不存在于数据库 neo4j 中。验证拼写是否正确。

改进建议

验证关系类型是否拼写错误。如果您打算将来创建此类型的关系,则无需更改。

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

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

改进建议

验证关系类型是否拼写错误。如果您打算将来创建此类型的关系,则无需更改。

未知属性键

表 13. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.UnknownPropertyKeyWarning

标题

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

描述

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

类别

UNRECOGNIZED

GQLSTATUS 代码

01N52

状态描述

warn: 未知属性键。属性 { $propKey } 不存在于数据库 { $db } 中。验证拼写是否正确。

分类

UNRECOGNIZED

严重程度

WARNING

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

01N52

返回的状态描述

warn: 未知属性键。属性 nme 不存在于数据库 neo4j 中。验证拼写是否正确。

改进建议

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

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

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

改进建议

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

聚合跳过空值

表 14. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.AggregationSkippedNull

标题

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

描述

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

类别

UNRECOGNIZED

GQLSTATUS 代码

01G11

状态描述

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

分类

UNRECOGNIZED

严重程度

WARNING

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

01G11

返回的状态描述

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

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

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

UNSUPPORTED 通知

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

不支持的运行时

表 15. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.RuntimeUnsupportedWarning

标题

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

描述

所选运行时不支持此查询,请改用其他运行时或回退到默认值。(%s)

类别

UNSUPPORTED

GQLSTATUS 代码

01N40

状态描述

warn: 不支持的运行时。查询无法使用 { $preparserInput1 } 执行,已使用 { $preparserInput2 }。原因:{ $msg }

分类

UNSUPPORTED

严重程度

WARNING

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

01N40

返回的状态描述

warn: 不支持的运行时。查询无法使用 runtime=pipelined 执行,已使用 runtime=slotted。原因:Pipelined 尚不支持包含 ShowIndexes 的计划,请使用其他运行时。

改进建议

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

SHOW INDEXES YIELD *
查询
CYPHER runtime=pipelined SHOW INDEXES YIELD *
返回代码的描述

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

改进建议

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

SHOW INDEXES YIELD *

RuntimeExperimental

此通知的使用已在 Neo4j 5.14 之后移除。

表 16. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.RuntimeExperimental

标题

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

描述

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

类别

UNSUPPORTED

严重程度

WARNING

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

您正在使用实验性功能(并行运行时是实验性的,可能会出现不稳定和潜在的正确性问题。)

改进建议

并行运行时不应在生产中使用。选择其他运行时或移除选项以使用默认运行时。

MATCH (n) RETURN (n)

DEPRECATION 通知

弃用通知包含有关已弃用功能的信息。务必切换到新功能,否则,查询在未来版本中可能会中断。

功能已弃用

表 17. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.FeatureDeprecationWarning

标题

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

描述

  • 此过程具有已弃用的字段。(%s)

  • 此函数具有已弃用的字段。(%s)

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

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

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

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

  • 从 Neo4j 5.5 起生效 UNION [ALL] 中的所有子查询应具有相同的返回列顺序。在 UNION [ALL] 子句中使用不同顺序的返回项已弃用,并将在未来版本中移除。

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

类别

DEPRECATION

GQLSTATUS 代码

01N00

状态描述

warn: 功能已弃用。{ $item }

分类

DEPRECATION

严重程度

WARNING

示例 18. 创建带有未转义名称中包含点的数据库
查询
CREATE DATABASE foo.bar
返回的 GQLSTATUS 代码

01N00

返回的状态描述

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

改进建议

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

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

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

改进建议

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

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

01N00

返回的状态描述

warn: 功能已弃用。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
返回代码的描述

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

改进建议

在所有通过 UNION 子句组合的子查询中,对返回列使用相同的顺序。

RETURN 'val' as one, 'val' as two
UNION
RETURN 'val' as one, 'val' as two

在 5.5 到 5.25 版本中,在 UNION [ALL] 子句中使用不同顺序的返回项已弃用。然而,从 5.26 版本开始,经过成本效益分析和宝贵的用户反馈,此弃用已被撤回。

示例 20. 在未转义标识符中使用 Unicode \u0085
查询
RETURN 1 as my\u0085identifier
返回的 GQLSTATUS 代码

01N00

返回的状态描述

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

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

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

已弃用功能并提供替代方案

表 18. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.FeatureDeprecationWarning

标题

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

描述

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

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

  • 使用最短路径和所有最短路径与固定长度关系已弃用,并将在未来版本中移除。请改用长度为 1 [r*1..1] 的路径或带 limit 的 Match。

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

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

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

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

类别

DEPRECATION

GQLSTATUS 代码

01N01

状态描述

warn: 功能已弃用并提供替代方案。{ $feat1 } 已弃用。它已被 { $feat2 } 替代。

分类

DEPRECATION

严重程度

WARNING

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

01N01

返回的状态描述

warn: 功能已弃用并提供替代方案。:A|:B|:C 已弃用。它已被 :A|B|C 替代。

改进建议

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

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

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

改进建议

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

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

01N01

返回的状态描述

warn: 功能已弃用并提供替代方案。SET a = b 已弃用。它已被 SET a = properties(b) 替代。

改进建议

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

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

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

改进建议

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

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

01N01

返回的状态描述

warn: 功能已弃用并提供替代方案。SET a += r 已弃用。它已被 SET a += properties(r) 替代。

改进建议

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

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

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

改进建议

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

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

01N01

返回的状态描述

warn: 功能已弃用并提供替代方案。shortestPath((a)-[r]→()) 已弃用。它已被 shortestPath((n)-[r*1..1]→(m)) 替代。

改进建议

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

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

使用 shortestPathallShortestPaths 与固定长度关系已弃用,并将在未来版本中移除。请改用长度为 1 [r*1..1] 的路径或带 limitMatch

改进建议

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

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

01N01

返回的状态描述

warn: 功能已弃用并提供替代方案。runtime=interpreted 已弃用。它已被 runtime=slotted 替代。

改进建议

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

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

查询使用了已弃用的运行时选项。('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'}
返回的 GQLSTATUS 代码

01N01

返回的状态描述

warn: 功能已弃用并提供替代方案。text-1.0 已弃用。它已被 text-2.0 替代。

改进建议

将选项 indexProvider 更新为值 text-2.0

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'}
返回代码的描述

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

改进建议

将选项 indexProvider 更新为值 text-2.0

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

01N01

返回的状态描述

warn: 功能已弃用并提供替代方案。cdc.query 已弃用。它已被 db.cdc.query 替代。

改进建议

请改用 db.cdc.query 过程。

CALL db.cdc.query()
查询
CALL cdc.query()
返回代码的描述

查询使用了已弃用的过程:cdc.query

改进建议

请改用 db.cdc.query 过程。

CALL db.cdc.query()
示例 28. 使用 id() 函数
查询
MATCH (a)
RETURN id(a)
返回的 GQLSTATUS 代码

01N01

返回的状态描述

warn: 功能已弃用并提供替代方案。id 已弃用。它已被 elementId 替代或考虑使用应用程序生成的 id。

改进建议

请改用 elementId() 函数。

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

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

改进建议

请改用 elementId() 函数。

MATCH (a)
RETURN elementId(a)
示例 29. 在节点模式中使用未转义的变量名 'where'
查询
MATCH (where {p: 5})
RETURN where
返回的 GQLSTATUS 代码

01N01

返回的状态描述

warn: 功能已弃用并提供替代方案。(where {p: 5}) 已弃用。它已被 (`where` {p: 5}) 替代。

改进建议

要继续使用此名称的变量,请使用反引号转义变量名。

MATCH (`where` {p: 5})
RETURN `where`.p
查询
MATCH (where {p: 5})
RETURN where
返回代码的描述

'(where {p: 5})' 已弃用。它已被 '(`where` {p: 5})' 替代。

改进建议

要继续使用此名称的变量,请使用反引号转义变量名。

MATCH (`where` {p: 5})
RETURN `where`.p
示例 30. 在关系模式中使用未转义的变量名 'where'
查询
MATCH ()-[where {p: 5}]->()
RETURN where
返回的 GQLSTATUS 代码

01N01

返回的状态描述

warn: 功能已弃用并提供替代方案。-[where {p: 5}]- 已弃用。它已被 -[`where` {p: 5}]- 替代。

改进建议

要继续使用此名称的变量,请使用反引号转义变量名。

MATCH ()-[`where` {p: 5}]->()
RETURN `where`.p
查询
MATCH ()-[where {p: 5}]->()
RETURN where
返回代码的描述

'-[where {p: 5}]-' 已弃用。它已被 '-[`where` {p: 5}]-' 替代。

改进建议

要继续使用此名称的变量,请使用反引号转义变量名。

MATCH ()-[`where` {p: 5}]->()
RETURN `where`.p
示例 31. 将未加括号的标签表达式谓词用作 + 的右侧操作数
查询
MATCH (n)-[r]->(m)
WITH m, n.truthCodes AS listOfBooleans
RETURN listOfBooleans + m:A
返回的 GQLSTATUS 代码

01N01

返回的状态描述

warn: 功能已弃用并提供替代方案。…​ + m:A 已弃用。它已被 …​ + (m:A) 替代。

改进建议

+ 右侧的标签表达式谓词加上括号。

MATCH (n)-[r]->(m)
WITH m, n.truthCodes AS listOfBooleans
RETURN listOfBooleans + (m:A)
查询
MATCH (n)-[r]->(m)
WITH m, n.truthCodes AS listOfBooleans
RETURN listOfBooleans + m:A
返回代码的描述

'…​ + m:A' 已弃用。它已被 '…​ + (m:A)' 替代。

改进建议

+ 右侧的标签表达式谓词加上括号。

MATCH (n)-[r]->(m)
WITH m, n.truthCodes AS listOfBooleans
RETURN listOfBooleans + (m:A)
示例 32. 将未加括号的标签表达式谓词用作 + 的右侧操作数
查询
MATCH (n)-[r]->(m)
WITH r, n.truthCodes AS listOfBooleans
RETURN listOfBooleans + r:C|D
返回的 GQLSTATUS 代码

01N01

返回的状态描述

warn: 功能已弃用并提供替代方案。…​ + r:C|D 已弃用。它已被 …​ + (r:C|D) 替代。

改进建议

+ 右侧的标签表达式谓词加上括号。

MATCH (n)-[r]->(m)
WITH r, n.truthCodes AS listOfBooleans
RETURN listOfBooleans + (r:C|D)
查询
MATCH (n)-[r]->(m)
WITH r, n.truthCodes AS listOfBooleans
RETURN listOfBooleans + r:C|D
返回代码的描述

'…​ + r:C|D' 已弃用。它已被 '…​ + (r:C|D)' 替代。

改进建议

+ 右侧的标签表达式谓词加上括号。

MATCH (n)-[r]->(m)
WITH r, n.truthCodes AS listOfBooleans
RETURN listOfBooleans + (r:C|D)
示例 33. 在简单 CASE 表达式中,将未转义的变量名 is 用作 WHEN 操作数
查询
MATCH (n)
WITH n, n.internationalStandard AS is
RETURN CASE n
  WHEN is :: INTEGER THEN "ISO/IEC" + is
  ELSE is
END AS standardsName
返回的 GQLSTATUS 代码

01N01

返回的状态描述

warn: 功能已弃用并提供替代方案。WHEN is :: INTEGER 已弃用。它已被 WHEN `is` :: INTEGER 替代。

改进建议

要继续在简单 CASE 表达式中使用此名称的变量,请使用反引号转义变量名。

MATCH (n)
WITH n, n.internationalStandard AS `is`
RETURN CASE n
  WHEN `is` :: INTEGER THEN "ISO/IEC" + `is`
  ELSE `is`
END AS standardsName
查询
MATCH (n)
WITH n, n.internationalStandard AS is
RETURN CASE n
  WHEN is :: INTEGER THEN "ISO/IEC" + is
  ELSE is
END AS standardsName
返回代码的描述
'何时

INTEGER' 已弃用。它已被 'WHEN `is` :: INTEGER' 替代。

改进建议

要继续在简单 CASE 表达式中使用此名称的变量,请使用反引号转义变量名。

MATCH (n)
WITH n, n.internationalStandard AS `is`
RETURN CASE n
  WHEN `is` :: INTEGER THEN "ISO/IEC" + `is`
  ELSE `is`
END AS standardsName
示例 34. 在简单 CASE 表达式中,将未转义的变量名 contains 用于 WHEN 操作数内的加法运算
查询
MATCH p = (:A)-[:HAS]->(:B)
WITH p, size(relationships(p)) AS contains
RETURN CASE size(nodes(p))
  WHEN contains + 1 THEN "okay"
  ELSE "not okay"
END AS check
返回的 GQLSTATUS 代码

01N01

返回的状态描述

warn: 功能已弃用并提供替代方案。WHEN contains + 1 INTEGER 已弃用。它已被 WHEN `contains` + 1 INTEGER 替代。

改进建议

要继续在简单 CASE 表达式中使用此名称的变量,请使用反引号转义变量名。

MATCH p = (:A)-[:HAS]->(:B)
WITH p, size(relationships(p)) AS `contains`
RETURN CASE size(nodes(p))
  WHEN `contains` + 1 THEN "okay"
  ELSE "not okay"
END AS check
查询
MATCH p = (:A)-[:HAS]->(:B)
WITH p, size(relationships(p)) AS contains
RETURN CASE size(nodes(p))
  WHEN contains + 1 THEN "okay"
  ELSE "not okay"
END AS check
返回代码的描述

'WHEN contains + 1 INTEGER' 已弃用。它已被 'WHEN `contains` + 1 INTEGER' 替代。

改进建议

要继续在简单 CASE 表达式中使用此名称的变量,请使用反引号转义变量名。

MATCH p = (:A)-[:HAS]->(:B)
WITH p, size(relationships(p)) AS `contains`
RETURN CASE size(nodes(p))
  WHEN `contains` + 1 THEN "okay"
  ELSE "not okay"
END AS check
示例 35. 在简单 CASE 表达式中,将未转义的变量名 contains 用于 WHEN 操作数内的减法运算
查询
MATCH p = (:A)-[:HAS]->(:B)
WITH p, size(nodes(p)) AS contains
RETURN CASE size(relationships(p))
  WHEN contains - 1 THEN "okay"
  ELSE "not okay"
END AS check
返回的 GQLSTATUS 代码

01N01

返回的状态描述

warn: 功能已弃用并提供替代方案。WHEN contains - 1 INTEGER 已弃用。它已被 WHEN `contains` - 1 INTEGER 替代。

改进建议

要继续在简单 CASE 表达式中使用此名称的变量,请使用反引号转义变量名。

MATCH p = (:A)-[:HAS]->(:B)
WITH p, size(nodes(p)) AS `contains`
RETURN CASE size(relationships(p))
  WHEN `contains` - 1 THEN "okay"
  ELSE "not okay"
END AS check
查询
MATCH p = (:A)-[:HAS]->(:B)
WITH p, size(nodes(p)) AS contains
RETURN CASE size(relationships(p))
  WHEN contains - 1 THEN "okay"
  ELSE "not okay"
END AS check
返回代码的描述

'WHEN contains - 1 INTEGER' 已弃用。它已被 'WHEN `contains` - 1 INTEGER' 替代。

改进建议

要继续在简单 CASE 表达式中使用此名称的变量,请使用反引号转义变量名。

MATCH p = (:A)-[:HAS]->(:B)
WITH p, size(nodes(p)) AS `contains`
RETURN CASE size(relationships(p))
  WHEN `contains` - 1 THEN "okay"
  ELSE "not okay"
END AS check
示例 36. 在简单 CASE 表达式中,在 WHEN 操作数内对未转义的变量名 in 使用 [] 运算符
查询
MATCH (c:Client)-[:MAKES]->(t:Transaction)
WITH t, c.ibanNumbers AS in
RETURN CASE t.ibanNumber
  WHEN in[0] THEN "used main account"
  ELSE "used different account"
END AS check
返回的 GQLSTATUS 代码

01N01

返回的状态描述

warn: 功能已弃用并提供替代方案。WHEN in[0] INTEGER 已弃用。它已被 WHEN `in`[0] INTEGER 替代。

改进建议

要继续在简单 CASE 表达式中使用此名称的变量,请使用反引号转义变量名。

MATCH (c:Client)-[:MAKES]->(t:Transaction)
WITH t, c.ibanNumbers AS `in`
RETURN CASE t.ibanNumber
  WHEN `in`[0] THEN "used main account"
  ELSE "used different account"
END AS check
查询
MATCH (c:Client)-[:MAKES]->(t:Transaction)
WITH t, c.ibanNumbers AS in
RETURN CASE t.ibanNumber
  WHEN in[0] THEN "used main account"
  ELSE "used different account"
END AS check
返回代码的描述

'WHEN in[0] INTEGER' 已弃用。它已被 'WHEN `in`[0] INTEGER' 替代。

改进建议

要继续在简单 CASE 表达式中使用此名称的变量,请使用反引号转义变量名。

MATCH (c:Client)-[:MAKES]->(t:Transaction)
WITH t, c.ibanNumbers AS `in`
RETURN CASE t.ibanNumber
  WHEN `in`[0] THEN "used main account"
  ELSE "used different account"
END AS check
示例 37. 在简单 CASE 表达式中,在 WHEN 操作数内对未转义的变量名 in 使用 [] 运算符
查询
MATCH (in:Client)-[:MAKES]->(t:Transaction)
RETURN CASE t.ibanNumber
  WHEN in["mainAccount"] THEN "used main account"
  ELSE "used different account"
END AS check
返回的 GQLSTATUS 代码

01N01

返回的状态描述

warn: 功能已弃用并提供替代方案。WHEN in["mainAccount"] INTEGER 已弃用。它已被 WHEN `in`["mainAccount"] INTEGER 替代。

改进建议

要继续在简单 CASE 表达式中使用此名称的变量,请使用反引号转义变量名。

MATCH (in:Client)-[:MAKES]->(t:Transaction)
RETURN CASE t.ibanNumber
  WHEN `in`["mainAccount"] THEN "used main account"
  ELSE "used different account"
END AS check
查询
MATCH (in:Client)-[:MAKES]->(t:Transaction)
RETURN CASE t.ibanNumber
  WHEN in["mainAccount"] THEN "used main account"
  ELSE "used different account"
END AS check
返回代码的描述

'WHEN in["mainAccount"] INTEGER' 已弃用。它已被 'WHEN `in`["mainAccount"] INTEGER' 替代。

改进建议

要继续在简单 CASE 表达式中使用此名称的变量,请使用反引号转义变量名。

MATCH (in:Client)-[:MAKES]->(t:Transaction)
RETURN CASE t.ibanNumber
  WHEN `in`["mainAccount"] THEN "used main account"
  ELSE "used different account"
END AS check

已弃用功能,无未来替代方案

表 19. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.FeatureDeprecationWarning

标题

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

描述

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

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

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

类别

DEPRECATION

GQLSTATUS 代码

01N02

状态描述

warn: 功能已弃用,无替代方案。{ $feat } 已弃用,将被移除而无替代方案。

分类

DEPRECATION

严重程度

WARNING

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

01N02

返回的状态描述

warn: 功能已弃用,无替代方案。connectComponentsPlanner 已弃用,将被移除而无替代方案。

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

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

示例 39. 使用已弃用的过程
查询
CALL unsupported.dbms.shutdown()
返回的 GQLSTATUS 代码

01N02

返回的状态描述

warn: 功能已弃用,无替代方案。unsupported.dbms.shutdown 已弃用,将被移除而无替代方案。

改进建议

移除对已弃用过程的使用。如果存在建议的替代方案,请更新以使用替代方案。

查询
CALL unsupported.dbms.shutdown()
返回代码的描述

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

改进建议

移除对已弃用过程的使用。如果存在建议的替代方案,请更新以使用替代方案。

过程字段已弃用

表 20. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.FeatureDeprecationWarning

标题

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

描述

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

类别

DEPRECATION

GQLSTATUS 代码

01N03

状态描述

warn: 过程字段已弃用。过程 { $proc } 的字段 { $procField } 已弃用。

分类

DEPRECATION

严重程度

WARNING

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

表 21. 通知详情

Neo4j 代码

Neo.ClientNotification.Request.DeprecatedFormat

标题

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

描述

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

类别

DEPRECATION

GQLSTATUS 代码

01N01

状态描述

warn: 功能已弃用并提供替代方案。{ $feat1 } 已弃用。它已被 { $feat2 } 替代。

分类

DEPRECATION

严重程度

WARNING

SECURITY 通知

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

角色或权限未分配

表 22. 通知详情

Neo4j 代码

Neo.ClientNotification.Security.CommandHasNoEffect

标题

<command> 无效。*

描述

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

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

类别

SECURITY

GQLSTATUS 代码

00N71

状态描述

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

分类

SECURITY

严重程度

INFORMATION

*<command>cmd 可以是用户给出的完整命令,也可以是给定命令的子集。

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

00N71

返回的状态描述

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

改进建议

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

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

REVOKE ROLE reader FROM jane 无效。

返回代码的描述

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

改进建议

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

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

00N71

返回的状态描述

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

改进建议

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

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

REVOKE DENY WRITE ON GRAPH * FROM reader 无效。

返回代码的描述

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

改进建议

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

角色或权限已分配

表 23. 通知详情

Neo4j 代码

Neo.ClientNotification.Security.CommandHasNoEffect

标题

<command> 无效。*

描述

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

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

类别

SECURITY

GQLSTATUS 代码

00N70

状态描述

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

分类

SECURITY

严重程度

INFORMATION

*<command>cmd 可以是用户给出的完整命令,也可以是给定命令的子集。

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

00N70

返回的状态描述

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

改进建议

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

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

GRANT ROLE admin TO john 无效。

返回代码的描述

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

改进建议

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

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

00N70

返回的状态描述

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

改进建议

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

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

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

返回代码的描述

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

改进建议

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

不可能的撤销命令

表 24. 通知详情

Neo4j 代码

Neo.ClientNotification.Security.ImpossibleRevokeCommand

标题

<command> 无效。*

描述

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

类别

SECURITY

GQLSTATUS 代码

01N70

状态描述

warn: 无法操作的撤销命令。命令 { $cmd } 无效。请确保没有拼写错误。此通知将在未来的主要版本中变为错误。原因:{ $msg }

分类

SECURITY

严重程度

WARNING

*<command>cmd 可以是用户给出的完整命令,也可以是给定命令的子集。

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

01N70

返回的状态描述

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

改进建议

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

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

REVOKE ROLE manager FROM jane 无效。

返回代码的描述

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

改进建议

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

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

01N70

返回的状态描述

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

改进建议

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

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

REVOKE ROLE reader FROM alice 无效。

返回代码的描述

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

改进建议

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

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

01N70

返回的状态描述

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

改进建议

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

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

REVOKE GRANT WRITE ON GRAPH * FROM manager FROM manager 无效。

返回代码的描述

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

改进建议

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

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

01N70

返回的状态描述

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

改进建议

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

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

REVOKE GRANT WRITE ON GRAPH neo3j FROM editor 无效。

返回代码的描述

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

改进建议

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

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

01N70

返回的状态描述

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

改进建议

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

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

REVOKE GRANT ACCESS ON DATABASE neo3j FROM editor 无效。

返回代码的描述

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

改进建议

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

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

01N70

返回的状态描述

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

改进建议

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

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

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

返回代码的描述

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

改进建议

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

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

01N70

返回的状态描述

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

改进建议

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

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

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

返回代码的描述

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

改进建议

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

身份验证提供程序未定义

表 25. 通知详情

Neo4j 代码

Neo.ClientNotification.Security.AuthProviderNotDefined

标题

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

描述

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

类别

SECURITY

GQLSTATUS 代码

00N72

状态描述

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

分类

SECURITY

严重程度

INFORMATION

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

00N72

返回的状态描述

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

改进建议

请确保给定的提供程序是正确的,如果不是,请替换它。如果它是正确的,请确保将其作为已知身份验证提供程序添加到 dbms.security.authentication_providers 和/或 dbms.security.authorization_providers 中。

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

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

改进建议

请确保给定的提供程序是正确的,如果不是,请替换它。如果它是正确的,请确保将其作为已知身份验证提供程序添加到 dbms.security.authentication_providers 和/或 dbms.security.authorization_providers 中。

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

00N72

返回的状态描述

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

改进建议

请确保给定的提供程序是正确的,如果不是,请替换它。如果它是正确的,请确保将其作为已知身份验证提供程序添加到 dbms.security.authentication_providers 和/或 dbms.security.authorization_providers 中。

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

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

改进建议

请确保给定的提供程序是正确的,如果不是,请替换它。如果它是正确的,请确保将其作为已知身份验证提供程序添加到 dbms.security.authentication_providers 和/或 dbms.security.authorization_providers 中。

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

表 26. 通知详情

Neo4j 代码

Neo.ClientNotification.Security.ExternalAuthNotEnabled

标题

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

描述

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

类别

SECURITY

GQLSTATUS 代码

01N71

状态描述

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

分类

SECURITY

严重程度

WARNING

示例 53. 在未启用链接用户时创建使用外部身份验证提供程序的用户
命令
CREATE USER foo SET AUTH 'exampleProvider' { SET ID 'idString' }
返回的 GQLSTATUS 代码

01N71

返回的状态描述

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

改进建议

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

命令
CREATE USER foo SET AUTH 'exampleProvider' { SET ID 'idString' }
改进建议

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

示例 54. 修改用户以添加外部身份验证提供程序(未启用链接用户时)
命令
ALTER USER foo SET AUTH 'exampleProvider' { SET ID 'idString' }
返回的 GQLSTATUS 代码

01N71

返回的状态描述

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

改进建议

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

命令
ALTER USER foo SET AUTH 'exampleProvider' { SET ID 'idString' }
改进建议

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

查询使用不安全的协议

表 27. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.InsecureProtocol

标题

查询使用不安全的协议

描述

该查询使用不安全的协议。请考虑改用 'https'。

类别

SECURITY

GQLSTATUS 代码

01N72

状态描述

警告:不安全的 URL 协议。查询使用不安全的协议。请考虑改用 'https'。

分类

SECURITY

严重程度

WARNING

拓扑通知

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

服务器已启用

表 28. 通知详情

Neo4j 代码

Neo.ClientNotification.Cluster.ServerAlreadyEnabled

标题

<command> 无效。

描述

服务器 %s 已启用。请验证这是否是预期的服务器。

类别

拓扑

GQLSTATUS 代码

00N80

状态描述

注意:成功完成 - 服务器已启用。命令 ENABLE SERVER 无效。服务器 { $server } 已启用。请验证这是否是预期的服务器。

分类

拓扑

严重程度

INFORMATION

示例 55. 启用一个已启用的服务器
命令
ENABLE SERVER "123e4567-e89b-12d3-a456-426614174000"
返回的 GQLSTATUS 代码

00N80

返回的状态描述

注意:成功完成 - 服务器已启用。ENABLE SERVER 无效。服务器 123e4567-e89b-12d3-a456-426614174000 已启用。请验证这是否是预期的服务器。

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

服务器 123e4567-e89b-12d3-a456-426614174000 已启用。请验证这是否是预期的服务器。

服务器已隔离

表 29. 通知详情

Neo4j 代码

Neo.ClientNotification.Cluster.ServerAlreadyCordoned

标题

<command> 无效。

描述

服务器 %s 已被隔离。请验证这是否是预期的服务器。

类别

拓扑

GQLSTATUS 代码

00N81

状态描述

注意:成功完成 - 服务器已隔离。命令 CORDON SERVER 无效。服务器 { $server } 已被隔离。请验证这是否是预期的服务器。

分类

拓扑

严重程度

INFORMATION

示例 56. 隔离一个已隔离的服务器
命令
CORDON SERVER "123e4567-e89b-12d3-a456-426614174000"
返回的 GQLSTATUS 代码

00N81

返回的状态描述

注意:成功完成 - 服务器已隔离。CORDON SERVER 无效。服务器 123e4567-e89b-12d3-a456-426614174000 已被隔离。请验证这是否是预期的服务器。

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

服务器 123e4567-e89b-12d3-a456-426614174000 已被隔离。请验证这是否是预期的服务器。

未重新分配数据库

表 30. 通知详情

Neo4j 代码

Neo.ClientNotification.Cluster.NoDatabasesReallocated

标题

<command> 无效。

描述

没有数据库被重新分配。目前无法进行更好的分配。

类别

拓扑

GQLSTATUS 代码

00N82

状态描述

注意:成功完成 - 未重新分配数据库。命令 REALLOCATE DATABASES 无效。没有数据库被重新分配。目前无法进行更好的分配。

分类

拓扑

严重程度

INFORMATION

示例 57. 重新分配数据库未导致任何分配更改
命令
REALLOCATE DATABASES
返回的 GQLSTATUS 代码

00N82

返回的状态描述

注意:成功完成 - 未重新分配数据库。REALLOCATE DATABASES 无效。没有数据库被重新分配。目前无法进行更好的分配。

示例场景

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

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

命令
REALLOCATE DATABASES
返回代码的描述

没有数据库被重新分配。目前无法进行更好的分配。

示例场景

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

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

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

当 Cypher 管理命令触发分配决策且部分服务器被隔离时,会返回此通知。例如,CREATE DATABASEALTER DATABASEDEALLOCATE DATABASES FROM SERVER[S]ALTER DATABASE 会返回此通知。但是,REALLOCATE DATABASES 要求没有被隔离的服务器,因此不会返回此通知。

表 31. 通知详情

Neo4j 代码

Neo.ClientNotification.Cluster.CordonedServersExistedDuringAllocation

标题

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

描述

服务器 %s 已被隔离。这可能会影响分配决策。

类别

拓扑

GQLSTATUS 代码

00N83

状态描述

注意:成功完成 - 分配期间存在被隔离的服务器。在进行分配决策时存在被隔离的服务器。服务器 { $serverList } 已被隔离。这可能会影响分配决策。

分类

拓扑

严重程度

INFORMATION

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

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

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

00N83

返回的状态描述

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

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

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

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

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

表 32. 通知详情

Neo4j 代码

Neo.ClientNotification.Cluster.RequestedTopologyMatchedCurrentTopology

标题

<command> 无效。

描述

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

类别

拓扑

GQLSTATUS 代码

00N84

状态描述

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

分类

拓扑

严重程度

INFORMATION

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

本示例假设您有一个包含三台服务器的集群和一个数据库 foo,其拓扑结构为两个主节点和一个从节点。

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

00N84

返回的状态描述

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

本示例假设您有一个包含三台服务器的集群和一个数据库 foo,其拓扑结构为两个主节点和一个从节点。

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

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

服务器在 WAIT 命令期间已追赶完成

表 33. 通知详情

Neo4j 代码

Neo.ClientNotification.Cluster.ServerCaughtUp

标题

服务器已追赶完成。

描述

地址为 (%s) 的服务器 (%s) 已追赶完成。

类别

拓扑

GQLSTATUS 代码

03N85

状态描述

信息:服务器已追赶完成。地址为 { $serverAddress } 的服务器 { $server } 已追赶完成。

分类

拓扑

严重程度

INFORMATION

示例 60. 包含两台服务器的 WAIT 命令成功完成
查询
CREATE DATABASE foo TOPOLOGY 2 PRIMARIES WAIT

集群中的每台服务器都会返回一个通知

返回的 GQLSTATUS 代码

03N85

返回的状态描述

信息:服务器已追赶完成。地址为 localhost:20025 的服务器 ServerId{0e010000} 已追赶完成。

返回的 GQLSTATUS 代码

03N85

返回的状态描述

信息:服务器已追赶完成。地址为 localhost:20026 的服务器 ServerId{0e020000} 已追赶完成。

查询
CREATE DATABASE foo TOPOLOGY 2 PRIMARIES WAIT

集群中的每台服务器都会返回一个通知

返回代码的描述

地址为 localhost:20025 的服务器 ServerId{0e010000} 已追赶完成。

返回代码的描述

地址为 localhost:20026 的服务器 ServerId{0e020000} 已追赶完成。

服务器在 WAIT 命令期间失败

表 34. 通知详情

Neo4j 代码

Neo.ClientNotification.Cluster.ServerFailed

标题

服务器失败。

描述

地址为 (%s) 的服务器 (%s) 失败:(%s)

类别

拓扑

GQLSTATUS 代码

01N80

状态描述

警告:服务器失败。地址为 { $serverAddress } 的服务器 { $server } 失败:{ $msg }

分类

拓扑

严重程度

WARNING

示例 61. 两台服务器中有一台在 WAIT 命令期间失败
查询
CREATE DATABASE foo TOPOLOGY 2 PRIMARIES WAIT

集群中的每台服务器都会返回一个通知

返回的 GQLSTATUS 代码

03N85

返回的状态描述

信息:服务器已追赶完成。地址为 localhost:20025 的服务器 ServerId{0e010000} 已追赶完成。

返回的 GQLSTATUS 代码

01N80

返回的状态描述

警告:服务器失败。地址为 localhost:20026 的服务器 ServerId{0e020000} 失败:已追赶完成但数据库 DatabaseId{0db00002[foo]} 存在故障。故障:java.nio.file.FileAlreadyExistsException: <…​>

改进建议

使用提供的消息调查失败的服务器。

查询
CREATE DATABASE foo TOPOLOGY 2 PRIMARIES WAIT

集群中的每台服务器都会返回一个通知

返回代码的描述

地址为 localhost:20025 的服务器 ServerId{0e010000} 已追赶完成。

返回代码的描述

地址为 localhost:20026 的服务器 ServerId{0e020000} 失败:已追赶完成但数据库 DatabaseId{0db00002[foo]} 存在故障。故障:java.nio.file.FileAlreadyExistsException: <…​>

改进建议

使用提供的消息调查失败的服务器。

服务器在 WAIT 命令期间仍在追赶中

表 35. 通知详情

Neo4j 代码

Neo.ClientNotification.Cluster.ServerCatchingUp

标题

服务器仍在追赶中。

描述

地址为 (%s) 的服务器 (%s) 仍在追赶中。

类别

拓扑

GQLSTATUS 代码

01N81

状态描述

警告:服务器正在追赶中。地址为 { $serverAddress } 的服务器 { $server } 仍在追赶中。

分类

拓扑

严重程度

WARNING

示例 62. 两台服务器中有一台在 WAIT 命令期间仍在追赶中
查询
CREATE DATABASE foo TOPOLOGY 2 PRIMARIES WAIT

集群中的每台服务器都会返回一个通知

返回的 GQLSTATUS 代码

03N85

返回的状态描述

信息:服务器已追赶完成。地址为 localhost:20025 的服务器 ServerId{0e010000} 已追赶完成。

返回的 GQLSTATUS 代码

01N81

返回的状态描述

警告:服务器正在追赶中。地址为 localhost:20026 的服务器 ServerId{0e020000} 仍在追赶中。

改进建议

此行为表明其中一台服务器落后。请调查服务器和网络是否存在性能问题,或增加等待超时时间。

查询
CREATE DATABASE foo TOPOLOGY 2 PRIMARIES WAIT

集群中的每台服务器都会返回一个通知

返回代码的描述

地址为 localhost:20025 的服务器 ServerId{0e010000} 已追赶完成。

返回代码的描述

地址为 localhost:20026 的服务器 ServerId{0e020000} 仍在追赶中。

改进建议

此行为表明其中一台服务器落后。请调查服务器和网络是否存在性能问题,或增加等待超时时间。

服务器在 WAIT 命令期间不可用

表 36. 通知详情

Neo4j 代码

Neo.ClientNotification.Cluster.ServerNotAvailable

标题

服务器不可用。

描述

服务器 (%s) 不可用。

类别

拓扑

GQLSTATUS 代码

01N82

状态描述

警告:服务器不可用。服务器 { $server } 不可用。

分类

拓扑

严重程度

WARNING

示例 63. 两台服务器中有一台在 WAIT 命令期间不可用
查询
CREATE DATABASE foo TOPOLOGY 2 PRIMARIES WAIT

集群中的每台服务器都会返回一个通知

返回的 GQLSTATUS 代码

03N85

返回的状态描述

信息:服务器已追赶完成。地址为 localhost:20025 的服务器 ServerId{0e010000} 已追赶完成。

返回的 GQLSTATUS 代码

01N82

返回的状态描述

警告:服务器不可用。地址为 localhost:20026 的服务器 ServerId{0e020000} 不可用。

改进建议

调查服务器以确定其不可用的原因。

查询
CREATE DATABASE foo TOPOLOGY 2 PRIMARIES WAIT

集群中的每台服务器都会返回一个通知

返回代码的描述

地址为 localhost:20025 的服务器 ServerId{0e010000} 已追赶完成。

返回代码的描述

地址为 localhost:20026 的服务器 ServerId{0e020000} 不可用。

改进建议

调查服务器以确定其不可用的原因。

SCHEMA 通知

Schema 通知提供与索引和约束相关的附加信息。

索引或约束已存在

表 37. 通知详情

Neo4j 代码

Neo.ClientNotification.Schema.IndexOrConstraintAlreadyExists

标题

<command> 无效。

描述

<conflicting> 已存在。

描述

%s 已存在。

类别

SCHEMA

GQLSTATUS 代码

00NA0

状态描述

注意:成功完成 - 索引或约束已存在。命令 { $cmd } 无效。由 { $idxOrConstrPat } 指定的索引或约束已存在。

严重程度

INFORMATION

*<command>cmd 可以是用户给出的完整命令,也可以是给定命令的子集。

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

给定一个名为 existingRangeIndex 的范围索引,其基于 (:Label {property})

命令
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) 已存在。

给定一个名为 existingRangeIndex 的范围索引,其基于 (:Label {property})

命令
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) 已存在。

示例 65. 当使用该名称的另一个不相关索引已存在时创建索引

给定一个名为 myIndex 的范围索引,其基于 (:Label {property})

命令
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)

给定一个名为 myIndex 的范围索引,其基于 (:Label {property})

命令
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)
示例 66. 当相同约束已存在时创建约束

给定一个名为 nodeKeyLabelPropertyConstraint 的节点键约束,其基于 (:Label {property})

命令
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 已存在。

给定一个名为 nodeKeyLabelPropertyConstraint 的节点键约束,其基于 (:Label {property})

命令
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 已存在。

示例 67. 当使用该名称的另一个不相关约束已存在时创建约束

给定一个名为 myConstraint 的节点键约束,其基于 (:Label {property})

命令
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

给定一个名为 myConstraint 的节点键约束,其基于 (:Label {property})

命令
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

索引或约束不存在

表 38. 通知详情

Neo4j 代码

Neo.ClientNotification.Schema.IndexOrConstraintDoesNotExist

标题

<command> 无效。

描述

%s 不存在。

类别

SCHEMA

GQLSTATUS 代码

00NA1

状态描述

注意:成功完成 - 索引或约束不存在。命令 { $cmd } 无效。指定的索引或约束 { $idxOrConstr } 不存在。

严重程度

INFORMATION

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

00NA1

返回的状态描述

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

改进建议

请验证这是否是预期的索引,并且拼写正确。

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

DROP INDEX nonExistingIndex IF EXISTS 无效。

返回代码的完整描述

nonExistingIndex 不存在。

改进建议

请验证这是否是预期的索引,并且拼写正确。

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

00NA1

返回的状态描述

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

改进建议

请验证这是否是预期的约束,并且拼写正确。

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

DROP CONSTRAINT nonExistingConstraint IF EXISTS 无效。

返回代码的完整描述

nonExistingConstraint 不存在。

改进建议

请验证这是否是预期的约束,并且拼写正确。

通用通知

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

子查询变量遮蔽

表 39. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.SubqueryVariableShadowing

标题

子查询中的变量遮蔽了外部作用域中同名的变量。

描述

子查询中的变量遮蔽了外部作用域中同名的变量。如果您想使用该变量,则必须使用 WITH 子句将其导入到子查询中。(%s)

类别

通用

GQLSTATUS 代码

03N60

状态描述

信息:子查询变量遮蔽。子查询中的变量 { $variable } 与外部查询中的变量同名。在子查询中使用 WITH { $variable } 将外部作用域中的变量导入,除非您希望它是一个新变量。

分类

通用

严重程度

INFORMATION

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

03N60

返回的状态描述

信息:子查询变量遮蔽。子查询中的变量 n 与外部查询中的变量同名。在子查询中使用 WITH n 将外部作用域中的变量导入,除非您希望它是一个新变量。

改进建议

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

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

子查询中的变量遮蔽了外部作用域中同名的变量。如果您想使用该变量,则必须使用 WITH 子句将其导入到子查询中。(遮蔽变量为:n

改进建议

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

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

冗余可选过程

表 40. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.RedundantOptionalProcedure

标题

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

描述

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

类别

通用

GQLSTATUS 代码

03N61

状态描述

信息:冗余可选过程。使用 OPTIONAL 是冗余的,因为 CALL { $proc } 是一个 void 过程。

分类

通用

严重程度

INFORMATION

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

03N61

返回的状态描述

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

改进建议

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

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

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

改进建议

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

CALL db.createLabel("A")

冗余可选子查询

表 41. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.RedundantOptionalSubquery

标题

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

描述

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

类别

通用

GQLSTATUS 代码

03N62

状态描述

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

分类

通用

严重程度

INFORMATION

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

03N62

返回代码的描述

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

改进建议

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

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

在单元子查询的情况下,Optional 是冗余的。在单元子查询上使用 OPTIONAL 没有效果,可以删除。

改进建议

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

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

缺少参数

表 42. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.ParameterNotProvided

标题

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

描述

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

类别

通用

GQLSTATUS 代码

01N60

状态描述

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

分类

通用

严重程度

WARNING

示例 73. 在未提供参数的情况下使用带参数的 EXPLAIN 查询
查询
EXPLAIN WITH $param as param
RETURN param
返回的 GQLSTATUS 代码

01N60

返回的状态描述

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

改进建议

提供参数以便能够缓存计划。

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

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

改进建议

提供参数以便能够缓存计划。

过程或函数执行警告

表 43. 通知详情

Neo4j 代码

Neo.ClientNotification.Procedure.ProcedureWarning

标题

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

描述

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

类别

通用

GQLSTATUS 代码

01N62

状态描述

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

分类

通用

严重程度

WARNING

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

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

表 44. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.UnsatisfiableRelationshipTypeExpression

标题

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

描述

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

类别

通用

GQLSTATUS 代码

01N61

状态描述

警告:无法满足的关系类型表达式。表达式 { $labelExpr } 无法满足,因为关系必须且只能有一种类型。

分类

通用

严重程度

WARNING

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

01N61

返回的状态描述

警告:无法满足的关系类型表达式。表达式 R1&R2 无法满足,因为关系必须且只能有一种类型。

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

关系类型表达式不可能被满足。(任何关系都不能满足 R1&R2。关系必须且只能有一种类型。)

重复的关系引用

表 45. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.RepeatedRelationshipReference

标题

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

描述

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

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

类别

通用

GQLSTATUS 代码

01N63

状态描述

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

分类

通用

严重程度

WARNING

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

01N63

返回的状态描述

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

改进建议

使用一个模式来匹配所有起始节点标签为 A 且结束节点标签为 B 的关系。

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

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

改进建议

使用一个模式来匹配所有起始节点标签为 A 且结束节点标签为 B 的关系。

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

01N63

返回的状态描述

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

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

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

词汇表

$action

操作的自由形式描述。

$alias

一个别名,例如 mydb-alias

$aliasList

别名列表,例如 mydb-alias1, mydb-alias2

$allocType

分配类型(primarysecondary)。

$arg

过程或函数参数,例如 databasepausedryrun 等。

$argType

参数类型,输入或输出。

$auth

身份验证提供程序名称,例如 ldapnative

$boltServerState

Bolt 服务器状态,例如 READY

$boltMsgLenLimit

Bolt 消息长度限制,例如 1000

$cause

错误原因的自由形式描述。

$cfgSetting

配置设置键,例如 server.https.enabled

$clause

Cypher 子句,例如 USEMATCH

$clause

Cypher 子句列表,例如 USE, MATCH

$cmd

Cypher 命令,例如 DROP DATABASEPROFILESHOW PROCEDURES

$component

某个组件,例如时间中的小时/分钟,整个输入中的子集输入,整个 CREATE/ALTER DB …​ SET TOPOLOGY 中的 TOPOLOGY 子句等。

$constr

约束名称,例如 book_isbn

$constrDescrOrName

约束描述,(:Label {property0, property1, property2, property1, property3})

$context

上下文的自由形式描述,其中某些内容无效或不受支持,例如 OPTIONSURLusername 等。

$coordinates

坐标值,例如 [3.15, 4.012, 5.905]

$count

某物的数量,例如 3

$countAllocs

希望使用的服务器数量。

$countSeeders

种子服务器的数量。

$crs

坐标参考系统,例如 WGS84

$db

数据库名称,例如 myDb

$dbList

数据库名称列表。

$dim

表示索引或点维度的数字。

$edition

Neo4j 版本,例如 Community 或 Enterprise。

$endpointType

关系的 startend 之一。

$entityId

节点或关系的 ID。

$entityType

一个节点或一个关系。

$expr

Cypher 表达式,例如 1 + n.prop

$exprType

自由形式表达式类型,例如 EXISTSCOUNTCOLLECT

$feat

自由形式的功能描述。

$field

输入字段,例如过程、函数或反序列化中的。

$fun

函数名称,例如 collect()

$funClass

用户定义函数实现类名称,例如 MyFunctionClass

$funType

函数类型,例如非确定性或聚合。

$graph

图的名称,例如 myGraph

$graphTypeDependence

约束的图类型依赖性,为 UNDESIGNATEDINDEPENDENTDEPENDENT 之一。

$hint

提示的自由形式描述,例如 USING INDEX n:N(prop)

$hintList

提示的自由形式描述列表,例如 USING INDEX n:N(prop)

$idx

索引名称,例如 my_index

$idxDescr

索引描述,例如 INDEX :Person(name)

$idxDescrOrName

索引描述符或名称。

$idxOrConstr

索引或约束名称,例如 my_indexbook_isbn

$idxOrConstrPat

索引或约束模式,例如 CREATE CONSTRAINT bar IF NOT EXISTS FOR (n:L) REQUIRE (n.p1) IS NODE KEY

$idxType

索引类型,例如文本、向量等。

$input

用户输入的一部分。

$inputList

用户输入列表。

$item

项目的自由形式描述。

$keyword

Cypher 关键字,例如 MERGE

$label

标签名称,例如 Person

$labelExpr

标签表达式,例如 (n:Movie|Person)

$labelList

标签名称列表,例如 Person, Actor

$lower

范围的最低接受数字。

$mapKey

Map 键。

$mapKeyList

Map 键列表,例如 Map {first: 1, second: 2} 中的 first and second

$matchMode

GPM 匹配模式,例如 REPEATABLE ELEMENTS

$msg

自由形式消息。

$msgTitle

自由形式消息标题。

$namespaceList

过程命名空间列表,例如 apoc.math.

$operation

数学运算,例如 除以零>

$option

选项名称

$optionList

选项名称列表。

$param

参数名称,例如 $pattern

$paramList

参数列表,例如 $pattern, $prop

$pat

模式,例如 (:Person)

$port

端口名称,例如 6362

$portList

端口名称列表,例如 6362, 6000, 7000

$pos

一个位置,例如序列中的位置,例如 2

$pred

一个谓词,例如 x = 3

$predList

谓词列表,例如 'x = 3', 'y > 4'

$preparserInput

预解析器输入的一部分。

$proc

过程名称,例如 db.labels()

$procClass

用户定义过程实现类名称,例如 MyProcedureClass

$procExeMode

过程执行模式,READWRITESCHEMADBMS 之一。

$procField

用户定义过程实现类参数名称,例如 myArgument

$procFieldType

用户定义过程实现类参数类型,inputoutput 之一。

$procFun

过程或函数名称或 ID,例如 db.labels()collect()

$procMethod

用户定义过程实现类方法名称,例如 myProcedureMethod

$procParam

用户定义过程实现参数名称。

$procParamFmt

自由形式用户定义过程实现参数格式,例如 com.example.*

$propKey

属性键名称,例如 name

$propKeyList

属性键名称列表,例如 name, age, hometown

$query

从数据库检索或向数据库写入信息的语句,例如 MATCH (n) WHERE n.prop

$reasonList

失败原因列表。

$relType

关系类型名称,例如 KNOWS

$replacement

自由形式文本、弃用功能的替代、Cypher 命令等。

$role

RBAC 角色名称,例如 adminpublicreceptionist

$routingPolicy

路由策略名称。

$runtime

Cypher 运行时名称。slottedpipelinedparallel 之一。

$schemaDescr

Schema 描述符,例如 (:Label1 {prop1})

$schemaDescrType

Schema 描述符的自由形式类型,例如 label property existence constraint

$selector

GPM 路径选择器,例如 ALL PATHSSHORTEST 2 等。

$selectorType

选择器类型。

$server

服务器名称或 ID,例如 25a7efc7-d063-44b8-bdee-f23357f89f01

$serverList

服务器名称或 ID 列表,例如 'server-1', 'server-2'

$serverType

服务器类型,PRIMARY (primaryConstrained)、SECONDARY (secondaryConstrained) 或 NONE

$serverAddress

服务器地址,例如 localhost:20025

$sig

过程或函数签名,例如 date(input = DEFAULT_TEMPORAL_ARGUMENT :: ANY) :: DATE

$syntax

Cypher 语法或关键字。

$temporal

时间值,例如 2025-02-18

$timeAmount

时间单位的整数数量(一个数字)。

$timeUnit

常见时间单位名称,例如 secondsminuteshours

$token

Token 名称,例如 MyLabelMyRelationshipTypemyPropertyKey

$tokenId

Token ID。

$tokenType

标签、关系类型或属性键之一。

$transactionId

正在运行的查询的事务 ID。

$typeDescription

类型的自由形式描述,例如“一个列表”。

$upper

范围的最高接受数字。

$url

一个 URL,例如 https://example.com

$user

一个用户名,例如 neo4j

$value

某个值。

$valueList

值列表。

$valueType

Cypher 值类型,例如 STRINGBOOLEANINTEGERLIST<STRING> 等。

$valueTypeList

Cypher 值类型列表。

$variable

变量名称,例如 n

$variableList

变量名称列表,例如 a, b, c

© . All rights reserved.