通知代码列表

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

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

PERFORMANCE(性能)通知

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

笛卡尔积

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

表 1. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.CartesianProduct

标题

此查询在断开连接的模式之间构建了一个笛卡尔积。

描述

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

类别

PERFORMANCE

GQLSTATUS 代码

03N90

状态描述

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

分类

PERFORMANCE

严重性级别

信息 (INFORMATION)

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

03N90

返回的状态描述

信息:笛卡尔积。断开连接的模式 (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

状态描述

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

分类

PERFORMANCE

严重性级别

信息 (INFORMATION)

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

03N91

返回的状态描述

信息:无界变长模式。提供的模式 (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

状态描述

信息:穷举最短路径。由于存在谓词 { $predList },查询将以穷举最短路径方式运行。可以使用 WITHMATCH 与存在谓词分开。

分类

PERFORMANCE

严重性级别

信息 (INFORMATION)

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

03N92

返回的状态描述

信息:穷举最短路径。由于存在谓词 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

状态描述

信息:无适用索引。在没有索引的标签上将 LOAD CSVMATCHMERGE 结合使用可能会导致较长的执行时间。请考虑为标签 { $label } 添加索引。

分类

PERFORMANCE

严重性级别

信息 (INFORMATION)

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

03N93

返回的状态描述

信息:无适用索引。在没有索引的标签上将 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

状态描述

信息:Eager 运算符。查询执行计划包含 Eager 运算符。将 LOAD CSVEager 结合使用可能会消耗大量内存。

分类

PERFORMANCE

严重性级别

信息 (INFORMATION)

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

03N94

返回的状态描述

信息: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

状态描述

信息:动态属性。标签/类型 { $labelList } 上存在索引。无法将索引用于动态属性。请考虑使用静态属性。

分类

PERFORMANCE

严重性级别

信息 (INFORMATION)

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

03N95

返回的状态描述

信息:动态属性。标签/类型 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

返回的状态描述

信息:动态属性。标签/类型 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

状态描述

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

分类

PERFORMANCE

严重性级别

信息 (INFORMATION)

HINT(提示)通知

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

连接提示无法满足

表 8. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.JoinHintUnfulfillableWarning

标题

数据库无法计划提示的连接。

描述

提示的连接未被计划。这可能是因为没有生成的计划包含连接键,请尝试使用不同的连接键或重构查询。(%s

类别

HINT

GQLSTATUS 代码

01N30

状态描述

警告:连接提示无法满足。无法创建带有 JOIN ON { $variableList } 的计划。请尝试更改连接键或重构查询。

分类

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

返回的状态描述

警告:连接提示无法满足。无法创建带有 JOIN ON a 的计划。请尝试更改连接键或重构查询。

改进建议

无法应用 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 *
返回代码描述

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

改进建议

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

提示的索引未找到

表 9. 通知详情

Neo4j 代码

Neo.ClientNotification.Schema.HintedIndexNotFound

标题

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

描述

提示的索引不存在,请检查模式(%s

类别

HINT

GQLSTATUS 代码

01N31

状态描述

警告:提示的索引未找到。无法创建带有 { $idxDescr } 的计划,因为索引不存在。

分类

HINT

严重性级别

WARNING

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

01N31

返回的状态描述

警告:提示的索引未找到。无法创建带有 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

返回的状态描述

警告:提示的索引未找到。无法创建带有 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

状态描述

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

分类

UNRECOGNIZED

严重性级别

信息 (INFORMATION)

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

00N50

返回的状态描述

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

改进建议

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

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

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

改进建议

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

未知标签

表 11. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.UnknownLabelWarning

标题

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

描述

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

类别

UNRECOGNIZED

GQLSTATUS 代码

01N50

状态描述

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

分类

UNRECOGNIZED

严重性级别

WARNING

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

01N50

返回的状态描述

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

改进建议

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

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

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

改进建议

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

未知关系类型

表 12. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.UnknownRelationshipTypeWarning

标题

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

描述

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

类别

UNRECOGNIZED

GQLSTATUS 代码

01N51

状态描述

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

分类

UNRECOGNIZED

严重性级别

WARNING

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

01N51

返回的状态描述

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

改进建议

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

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

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

改进建议

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

未知属性键

表 13. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.UnknownPropertyKeyWarning

标题

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

描述

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

类别

UNRECOGNIZED

GQLSTATUS 代码

01N52

状态描述

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

分类

UNRECOGNIZED

严重性级别

WARNING

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

01N52

返回的状态描述

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

改进建议

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

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

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

改进建议

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

聚合跳过了 null 值

表 14. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.AggregationSkippedNull

标题

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

描述

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

类别

UNRECOGNIZED

GQLSTATUS 代码

01G11

状态描述

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

分类

UNRECOGNIZED

严重性级别

WARNING

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

01G11

返回的状态描述

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

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

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

UNSUPPORTED(不支持)通知

不支持的通知包含有关在访问它们时使用的当前上下文中不支持的功能的信息。

不支持的值类型

表 15. 通知详情

Neo4j 代码

Neo.ClientNotification.Request.UnsupportedType

标题

客户端不支持此类型。

描述

此版本的客户端无法处理返回的一个或多个值,并已用占位符映射值替换它们。请升级您的客户端。

类别

UNSUPPORTED

GQLSTATUS 代码

01N83

状态描述

警告:客户端不支持此类型。客户端不支持类型 { $valueType }。请升级您的客户端。

分类

UNSUPPORTED

严重性级别

WARNING

示例 16. 使用不支持的驱动程序访问向量(例如 5.x 驱动程序)
查询
RETURN VECTOR([1, 2, 3], 3, INTEGER32)
返回的 GQLSTATUS 代码

01N83

返回的状态描述

警告:客户端不支持此类型。客户端不支持类型 VECTOR。请升级您的客户端。

改进建议

将您的客户端升级到支持此类型的版本。

查询
RETURN VECTOR([1, 2, 3], 3, INTEGER32)
返回代码描述

此版本的客户端无法处理返回的一个或多个值,并已用占位符映射值替换它们。请升级您的客户端。

改进建议

将您的客户端升级到支持此类型的版本。

DEPRECATION(弃用)通知

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

功能已弃用

表 16. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.FeatureDeprecationWarning

标题

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

描述

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

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

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

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

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

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

  • 没有变量作用域子句的 %s 子查询已弃用。请使用 CALL (%s) { …​ }

  • UNION [ALL] 中的所有子查询对于返回列应具有相同的排序。

    在版本 5.5 到 5.25 中,在 UNION [ALL] 子句中使用排序不同的返回项已弃用。但是,从 5.26 版本开始,经过成本效益分析和宝贵的用户反馈,该弃用已被撤回。
  • 5.26 至 2025.05 弃用 带有未转义 . 的数据库和别名已弃用,除非点表示它们属于复合数据库。包含 . 的名称应转义。(%s

    带有未转义 . 的数据库和别名在 5.26 到 2025.05 版本中已弃用。但是,从 2025.06 版本开始,该弃用已被撤回,并由两个新的弃用取代。进行此更改的原因是先前的引号规则被发现不一致且模棱两可,并将从 Cypher 25 开始进行改进。有关更多信息,请参阅
  • 2025.06 弃用 带有单独反引号引用名称部分的图引用(%s)已弃用。在以后的 Cypher 版本中,请使用参数或反引号引用整个名称(%s)。

  • 2025.06 弃用 带有单独反引号引用名称部分的图引用(%s)已弃用。在以后的 Cypher 版本中,请删除反引号(%s)。

  • 2025.11 弃用 调用的用户定义函数的命名空间已弃用。(%s)。

  • 2025.11 弃用 调用的用户定义过程的命名空间已弃用。(%s)。

  • 2025.11 弃用 调用的用户定义函数的命名空间已弃用,且该函数遮蔽了内部函数。(%s)。

类别

DEPRECATION

GQLSTATUS 代码

01N00

状态描述

警告:功能已弃用。{ $item }

分类

DEPRECATION

严重性级别

WARNING

示例 17. 在图引用中使用单独反引号引用的名称部分
查询
CYPHER 5 CREATE ALIAS `foo`.`bar` FOR DATABASE ...
返回的 GQLSTATUS 代码

01N00

返回的状态描述

警告:功能已弃用。带有单独反引号引用名称部分的图引用(`foo`.`bar`)已弃用。在以后的 Cypher 版本中,请使用参数或反引号引用整个名称(`foo.bar`)。

改进建议

在较新的 Cypher 版本中,要么整个图引用名称都应使用反引号引用,要么应作为参数传入。

CYPHER 25 CREATE ALIAS `foo.bar` FOR DATABASE ...
CYPHER 25 CREATE ALIAS $param FOR DATABASE ...

有关图引用语义的更多信息,请参阅 Cypher 手册 → 图引用

查询
CYPHER 5 CREATE ALIAS `foo`.`bar` FOR DATABASE ...
返回代码描述

带有单独反引号引用名称部分的图引用(`foo`.`bar`)已弃用。在以后的 Cypher 版本中,请使用参数或反引号引用整个名称(`foo.bar`)。

改进建议

在较新的 Cypher 版本中,要么整个图引用名称都应使用反引号引用,要么应作为参数传入。

CYPHER 25 CREATE ALIAS `foo.bar` FOR DATABASE ...
CYPHER 25 CREATE ALIAS $param FOR DATABASE ...

有关图引用语义的更多信息,请参阅 Cypher 手册 → 图引用

示例 18. 在 USE 子句的图引用中使用单独反引号引用的名称部分
查询
CYPHER 5 USE graph.byName("`a.b`.c") ...
返回的 GQLSTATUS 代码

01N00

返回的状态描述

警告:功能已弃用。带有单独反引号引用名称部分的图引用(`a.b`.`c`)已弃用。在以后的 Cypher 版本中,请删除反引号(a.b.c)。

改进建议

在较新的 Cypher 版本中,应删除反引号。

CYPHER 25 USE graph.byName("a.b.c") ...

有关图引用语义的更多信息,请参阅 Cypher 手册 → 图引用

查询
CYPHER 5 USE graph.byName("`a.b`.c") ...
返回代码描述

带有单独反引号引用名称部分的图引用(`a.b`.`c`)已弃用。在以后的 Cypher 版本中,请删除反引号(a.b.c)。

改进建议

在较新的 Cypher 版本中,应删除反引号。

CYPHER 25 USE graph.byName("a.b.c") ...

有关图引用语义的更多信息,请参阅 Cypher 手册 → 图引用

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

01N00

返回的状态描述

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

改进建议

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

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

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

改进建议

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

CREATE DATABASE `foo.bar`

带有未转义 . 的数据库和别名在 5.26 到 2025.05 版本中已弃用。但是,从 2025.06 版本开始,该弃用已被撤回,并由两个新的弃用取代。进行此更改的原因是先前的引号规则被发现不一致且模棱两可,并将从 Cypher 25 开始进行改进。有关更多信息,请参阅

示例 20. 在 UNION 子句中使用排序不同的返回项
查询
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
查询
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 版本开始,经过成本效益分析和宝贵的用户反馈,该弃用已被撤回。

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

01N00

返回的状态描述

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

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

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

示例 22. 使用没有变量作用域子句的 CALL 子查询
查询
WITH 42 AS nbr
CALL {
  WITH nbr
  RETURN nbr + 3 AS otherNbr
}
RETURN otherNbr
返回的 GQLSTATUS 代码

01N00

返回的状态描述

警告:功能已弃用。CALL 子查询没有变量作用域子句已弃用。请使用 CALL (nbr) {…​}

改进建议

用变量作用域子句替换导入的 WITH

WITH 42 AS nbr
CALL (nbr) {
  RETURN nbr + 3 AS otherNbr
}
RETURN otherNbr
查询
WITH 42 AS nbr
CALL {
  WITH nbr
  RETURN nbr + 3 AS otherNbr
}
RETURN otherNbr
返回代码描述

CALL 子查询没有变量作用域子句已弃用。请使用 CALL (nbr) {…​}

改进建议

用变量作用域子句替换导入的 WITH

WITH 42 AS nbr
CALL (nbr) {
  RETURN nbr + 3 AS otherNbr
}
RETURN otherNbr
示例 23. 已弃用的函数命名空间
查询
RETURN point.function() AS result
返回的 GQLSTATUS 代码

01N00

返回的状态描述

警告:功能已弃用。用户定义函数 point.function 使用的命名空间已弃用。

改进建议

将命名空间更改为非弃用的命名空间,例如 my.point.functionpointing.function

查询
RETURN point.function() AS result
返回代码描述

调用的用户定义函数的命名空间已弃用。(point.function)

示例 24. 已弃用的过程命名空间
查询
CALL point.procedure() AS result
RETURN result
返回的 GQLSTATUS 代码

01N00

返回的状态描述

警告:功能已弃用。用户定义过程 point.procedure 使用的命名空间已弃用。

改进建议

将命名空间更改为非弃用的命名空间,例如 my.point.procedurepointing.procedure

查询
CALL point.procedure() AS result
RETURN result
返回代码描述

调用的用户定义过程的命名空间已弃用。(point.procedure)

示例 25. 遮蔽内置函数
查询
RETURN coll.flatten() AS result
返回的 GQLSTATUS 代码

01N00

返回的状态描述

警告:功能已弃用。调用的用户定义函数 coll.flatten 的命名空间已弃用,且该函数遮蔽了内部函数。

改进建议

将命名空间更改为非弃用的命名空间,例如 my.coll.flattencollection.flatten

查询
RETURN coll.flatten() AS result
返回代码描述

调用的用户定义函数的命名空间已弃用,且该函数遮蔽了内部函数。(coll.flatten)

具有替代项的功能已弃用

表 17. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.FeatureDeprecationWarning

标题

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

描述

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

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

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

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

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

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

  • 用于文本索引的 text-1.0text-2.0(从 Neo4j 2025.09 开始)提供程序已弃用,并将在未来版本中删除。请改用 text-3.0

类别

DEPRECATION

GQLSTATUS 代码

01N01

状态描述

警告:具有替代项的功能已弃用。{ $feat } 已弃用。它被 { $feat } 取代。

分类

DEPRECATION

严重性级别

WARNING

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

01N01

返回的状态描述

警告:具有替代项的功能已弃用。: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 *
示例 27. 使用节点设置属性
查询
CYPHER 5
MATCH (a)-[]-(b)
SET a = b
返回的 GQLSTATUS 代码

01N01

返回的状态描述

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

改进建议

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

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

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

改进建议

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

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

01N01

返回的状态描述

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

改进建议

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

CYPHER 5
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)
示例 29. 带有固定关系长度的最短路径
查询
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
查询
MATCH (a:Start), shortestPath((a)-[r]->()) RETURN a
返回代码描述

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

改进建议

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

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

01N01

返回的状态描述

警告:具有替代项的功能已弃用。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
示例 31. 创建文本索引时使用 text-1.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'}
查询
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'}
示例 32. 使用重命名或已弃用的过程
CALL cdc.query()
返回的 GQLSTATUS 代码

01N01

返回的状态描述

警告:具有替代项的功能已弃用。cdc.query 已弃用。它被 db.cdc.query 取代。

改进建议

请改用过程 db.cdc.query

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

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

改进建议

请改用过程 db.cdc.query

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

01N01

返回的状态描述

警告:具有替代项的功能已弃用。id 已弃用。它被 elementId 取代,或者考虑使用应用程序生成的 id。

改进建议

请改用函数 elementId()

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

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

改进建议

请改用函数 elementId()

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

01N01

返回的状态描述

警告:具有替代项的功能已弃用。(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
示例 35. 在关系模式中使用名为 'where' 的未转义变量
查询
MATCH ()-[where {p: 5}]->()
RETURN where
返回的 GQLSTATUS 代码

01N01

返回的状态描述

警告:具有替代项的功能已弃用。-[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
示例 36. 使用非括号标签表达式谓词作为 + 的右侧操作数
查询
MATCH (n)-[r]->(m)
WITH m, n.truthCodes AS listOfBooleans
RETURN listOfBooleans + m:A
返回的 GQLSTATUS 代码

01N01

返回的状态描述

警告:具有替代项的功能已弃用。…​ + 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)
示例 37. 使用非括号标签表达式谓词作为 + 的右侧操作数
查询
MATCH (n)-[r]->(m)
WITH r, n.truthCodes AS listOfBooleans
RETURN listOfBooleans + r:C|D
返回的 GQLSTATUS 代码

01N01

返回的状态描述

警告:具有替代项的功能已弃用。…​ + 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)
示例 38. 在简单 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

返回的状态描述

警告:具有替代项的功能已弃用。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
返回代码描述
'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
示例 39. 在简单 CASE 表达式的 WHEN 操作数中,在加法运算中使用名为 contains 的未转义变量
查询
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

返回的状态描述

警告:具有替代项的功能已弃用。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
示例 40. 在简单 CASE 表达式的 WHEN 操作数中,在减法运算中使用名为 contains 的未转义变量
查询
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

返回的状态描述

警告:具有替代项的功能已弃用。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
示例 41. 在简单 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

返回的状态描述

警告:具有替代项的功能已弃用。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
示例 42. 在简单 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

返回的状态描述

警告:具有替代项的功能已弃用。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

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

Table 18. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.FeatureDeprecationWarning

标题

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

描述

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

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

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

类别

DEPRECATION

GQLSTATUS 代码

01N02

状态描述

警告:没有替代项的功能已弃用。{ $feat } 已弃用,并将删除,且不提供替代项。

分类

DEPRECATION

严重性级别

WARNING

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

01N02

返回的状态描述

警告:没有替代项的功能已弃用。connectComponentsPlanner 已弃用,并将删除,且不提供替代项。

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

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

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

01N02

返回的状态描述

警告:没有替代项的功能已弃用。unsupported.dbms.shutdown 已弃用,并将删除,且不提供替代项。

改进建议

删除对已弃用过程的使用。如果存在建议的替代项,请更新为使用该替代项。

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

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

改进建议

删除对已弃用过程的使用。如果存在建议的替代项,请更新为使用该替代项。

过程字段已弃用

Table 19. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.FeatureDeprecationWarning

标题

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

描述

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

类别

DEPRECATION

GQLSTATUS 代码

01N03

状态描述

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

分类

DEPRECATION

严重性级别

WARNING

具有替代项的功能已弃用 - API 请求

Table 20. 通知详情

Neo4j 代码

Neo.ClientNotification.Request.FeatureDeprecationWarning

标题

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

描述

%s 已弃用。它被 %s 取代。

类别

DEPRECATION

GQLSTATUS 代码

01N01

状态描述

警告:具有替代项的功能已弃用。{ $feat } 已弃用。它被 { $feat } 取代。

分类

DEPRECATION

严重性级别

WARNING

具有替代项的功能已弃用 - DeprecatedFormat

Table 21. 通知详情

Neo4j 代码

Neo.ClientNotification.Request.DeprecatedFormat

标题

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

描述

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

类别

DEPRECATION

GQLSTATUS 代码

01N01

状态描述

警告:具有替代项的功能已弃用。{ $feat } 已弃用。它被 { $feat } 取代。

分类

DEPRECATION

严重性级别

WARNING

SECURITY(安全)通知

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

角色或权限未分配

Table 22. 通知详情

Neo4j 代码

Neo.ClientNotification.Security.CommandHasNoEffect

标题

<command> 无效。*

描述

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

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

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

类别

SECURITY

GQLSTATUS 代码

00N71

状态描述

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

分类

SECURITY

严重性级别

信息 (INFORMATION)

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

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

00N71

返回的状态描述

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

改进建议

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

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

REVOKE ROLE reader FROM jane 无效。

返回代码描述

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

改进建议

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

示例 46. 从没有该角色的授权规则撤销角色
命令
REVOKE ROLE admin, reader FROM AUTH RULE authrule
返回的 GQLSTATUS 代码

00N71

返回的状态描述

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

改进建议

验证这是否是预期的角色和授权规则。

命令
REVOKE ROLE admin, reader FROM AUTH RULE authrule
返回代码的标题

REVOKE ROLE reader FROM AUTH RULE authrule 无效。

返回代码描述

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

改进建议

验证这是否是预期的角色和授权规则。

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

00N71

返回的状态描述

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

改进建议

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

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

REVOKE DENY WRITE ON GRAPH * FROM reader 无效。

返回代码描述

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

改进建议

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

角色或权限已分配

Table 23. 通知详情

Neo4j 代码

Neo.ClientNotification.Security.CommandHasNoEffect

标题

<command> 无效。*

描述

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

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

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

类别

SECURITY

GQLSTATUS 代码

00N70

状态描述

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

分类

SECURITY

严重性级别

信息 (INFORMATION)

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

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

00N70

返回的状态描述

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

改进建议

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

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

GRANT ROLE admin TO john 无效。

返回代码描述

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

改进建议

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

示例 49. 向已拥有该角色的授权规则授予角色
命令
GRANT ROLE admin TO AUTH RULE authrule
返回的 GQLSTATUS 代码

00N70

返回的状态描述

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

改进建议

验证这是否是预期的角色和授权规则。

命令
GRANT ROLE admin TO AUTH RULE authrule
返回代码的标题

GRANT ROLE admin TO AUTH RULE authrule 无效。

返回代码描述

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

改进建议

验证这是否是预期的角色和授权规则。

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

00N70

返回的状态描述

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

改进建议

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

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

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

返回代码描述

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

改进建议

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

不可能的撤销命令

Table 24. 通知详情

Neo4j 代码

Neo.ClientNotification.Security.ImpossibleRevokeCommand

标题

<command> 无效。*

描述

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

类别

SECURITY

GQLSTATUS 代码

01N70

状态描述

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

分类

SECURITY

严重性级别

WARNING

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

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

01N70

返回的状态描述

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

改进建议

验证这是否是预期的角色且拼写正确。

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

REVOKE ROLE manager FROM jane 无效。

返回代码描述

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

改进建议

验证这是否是预期的角色且拼写正确。

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

01N70

返回的状态描述

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

改进建议

验证这是否是预期的用户且拼写正确。

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

REVOKE ROLE reader FROM alice 无效。

返回代码描述

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

改进建议

验证这是否是预期的用户且拼写正确。

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

01N70

返回的状态描述

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

改进建议

验证这是否是预期的角色且拼写正确。

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

REVOKE GRANT WRITE ON GRAPH * FROM manager 无效。

返回代码描述

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

改进建议

验证这是否是预期的角色且拼写正确。

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

01N70

返回的状态描述

警告:不可能的撤销命令。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 不存在。请确保没有拼写错误。此通知在未来的主要版本中将变为错误。有关更多信息,请参阅状态码文档。

改进建议

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

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

01N70

返回的状态描述

警告:不可能的撤销命令。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 不存在。请确保没有拼写错误。此通知在未来的主要版本中将变为错误。有关更多信息,请参阅状态码文档。

改进建议

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

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

01N70

返回的状态描述

警告:不可能的撤销命令。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 * 来撤销所有图上的权限。

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

01N70

返回的状态描述

警告:不可能的撤销命令。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 * 来撤销所有数据库上的权限。

未定义授权提供程序

Table 25. 通知详情

Neo4j 代码

Neo.ClientNotification.Security.AuthProviderNotDefined

标题

未定义授权提供程序。

描述

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

类别

SECURITY

GQLSTATUS 代码

00N72

状态描述

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

分类

SECURITY

严重性级别

信息 (INFORMATION)

示例 58. 使用配置中未定义的授权提供程序创建用户
命令
CREATE USER foo SET AUTH 'unknownProvider' { SET ID 'idString' }
返回的 GQLSTATUS 代码

00N72

返回的状态描述

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

改进建议

确保给定的提供程序正确,如果不是,请替换它。如果它是正确的,请确保将其添加为 dbms.security.authentication_providersdbms.security.authorization_providers 中已知授权提供程序。

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

配置中未定义授权提供程序 unknownProvider。验证拼写是否正确或在配置中定义 unknownProvider

改进建议

确保给定的提供程序正确,如果不是,请替换它。如果它是正确的,请确保将其添加为 dbms.security.authentication_providersdbms.security.authorization_providers 中已知授权提供程序。

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

00N72

返回的状态描述

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

改进建议

确保给定的提供程序正确,如果不是,请替换它。如果它是正确的,请确保将其添加为 dbms.security.authentication_providersdbms.security.authorization_providers 中已知授权提供程序。

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

配置中未定义授权提供程序 unknownProvider。验证拼写是否正确或在配置中定义 unknownProvider

改进建议

确保给定的提供程序正确,如果不是,请替换它。如果它是正确的,请确保将其添加为 dbms.security.authentication_providersdbms.security.authorization_providers 中已知授权提供程序。

未启用用户的外部授权

Table 26. 通知详情

Neo4j 代码

Neo.ClientNotification.Security.ExternalAuthNotEnabled

标题

未启用用户的外部授权。

描述

使用设置 dbms.security.require_local_user 来启用外部授权。

类别

SECURITY

GQLSTATUS 代码

01N71

状态描述

警告:外部授权已禁用。使用设置 dbms.security.require_local_user 来启用外部授权。

分类

SECURITY

严重性级别

WARNING

示例 60. 在未启用链接用户的情况下,使用外部授权提供程序创建用户
命令
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 设置启用链接用户。在启用之前,新的外部授权将被忽略,现有的外部授权行为将继续适用。

示例 61. 在未启用链接用户的情况下,修改用户以添加外部授权提供程序
命令
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 设置启用链接用户。在启用之前,新的外部授权将被忽略,现有的外部授权行为将继续适用。

查询使用不安全的协议

Table 27. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.InsecureProtocol

标题

查询使用不安全的协议

描述

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

类别

SECURITY

GQLSTATUS 代码

01N72

状态描述

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

分类

SECURITY

严重性级别

WARNING

未启用 OIDC 凭据转发

Table 28. 通知详情

Neo4j 代码

Neo.ClientNotification.Security.OidcCredentialForwardingNotEnabled

标题

未启用 OIDC 凭据转发。

描述

使用设置 'dbms.security.allow_oidc_credential_forwarding_enabled' 来启用 OIDC 凭据转发。

类别

SECURITY

GQLSTATUS 代码

01N74

状态描述

警告:OIDC 凭据转发已禁用。使用设置 dbms.security.allow_oidc_credential_forwarding_enabled 来启用 OIDC 凭据转发。

分类

SECURITY

严重性级别

WARNING

示例 62. 在未启用 OIDC 凭据转发的情况下,创建远程凭据设置为 OIDC 凭据转发的远程数据库别名。
命令
CREATE ALIAS `remote-neo4j` FOR DATABASE `neo4j` AT "neo4j+s://location:7687" OIDC CREDENTIAL FORWARDING
返回的 GQLSTATUS 代码

01N74

返回的状态描述

警告:OIDC 凭据转发已禁用。使用设置 'dbms.security.allow_oidc_credential_forwarding_enabled' 来启用 OIDC 凭据转发。

改进建议

远程数据库别名已成功创建,但未启用 OIDC 凭据转发。要使用该别名连接到远程 Neo4j DBMS,请将 dbms.security.allow_oidc_credential_forwarding_enabled 设置为 true 以允许 OIDC 凭据转发。

命令
CREATE ALIAS `remote-neo4j` FOR DATABASE `neo4j` AT "neo4j+s://location:7687" OIDC CREDENTIAL FORWARDING
改进建议

远程数据库别名已成功创建,但未启用 OIDC 凭据转发。要使用该别名连接到远程 Neo4j DBMS,请将 dbms.security.allow_oidc_credential_forwarding_enabled 设置为 true 以允许 OIDC 凭据转发。

分片权限性能

Table 29. 通知详情

Neo4j 代码

Neo.ClientNotification.Security.ShardedPrivilegePerformance

标题

对分片数据库具有严重性能影响的权限。

描述

指定的权限严重降低了在分片数据库上运行的查询的性能。请考虑暂时排除分片数据库。

类别

SECURITY

GQLSTATUS 代码

01N73

状态描述

警告:分片权限性能。指定的权限严重降低了在分片数据库上运行的查询的性能。请考虑暂时排除分片数据库。

分类

SECURITY

严重性级别

WARNING

示例 63. 对所有数据库授予属性访问规则权限
命令
GRANT TRAVERSE ON GRAPH * TO ROLE exampleRole
返回的 GQLSTATUS 代码

01N73

返回的状态描述

警告:分片权限性能。指定的权限严重降低了在分片数据库上运行的查询的性能。请考虑暂时排除分片数据库。

改进建议

显式地将权限授予数据库,而不是授予所有数据库。

命令
GRANT TRAVERSE ON GRAPH * TO ROLE exampleRole
改进建议

显式地将权限授予数据库,而不是授予所有数据库。

TOPOLOGY(拓扑)通知

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

服务器已启用

Table 30. 通知详情

Neo4j 代码

Neo.ClientNotification.Cluster.ServerAlreadyEnabled

标题

<command> 无效。

描述

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

类别

TOPOLOGY

GQLSTATUS 代码

00N80

状态描述

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

分类

TOPOLOGY

严重性级别

信息 (INFORMATION)

示例 64. 启用已启用的服务器
命令
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 已启用。验证这是否是预期的服务器。

服务器已封锁

Table 31. 通知详情

Neo4j 代码

Neo.ClientNotification.Cluster.ServerAlreadyCordoned

标题

<command> 无效。

描述

服务器 %s 已封锁。验证这是否是预期的服务器。

类别

TOPOLOGY

GQLSTATUS 代码

00N81

状态描述

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

分类

TOPOLOGY

严重性级别

信息 (INFORMATION)

示例 65. 封锁已封锁的服务器
命令
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 已封锁。验证这是否是预期的服务器。

没有重新分配数据库

Table 32. 通知详情

Neo4j 代码

Neo.ClientNotification.Cluster.NoDatabasesReallocated

标题

<command> 无效。

描述

没有重新分配数据库。目前无法实现更好的分配。

类别

TOPOLOGY

GQLSTATUS 代码

00N82

状态描述

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

分类

TOPOLOGY

严重性级别

信息 (INFORMATION)

示例 66. 重新分配数据库导致没有分配更改
命令
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 要求不存在已封锁的服务器,因此不会返回它。

Table 33. 通知详情

Neo4j 代码

Neo.ClientNotification.Cluster.CordonedServersExistedDuringAllocation

标题

在做出分配决策时存在已封锁的服务器。

描述

服务器 %s 已封锁。这会影响分配决策。

类别

TOPOLOGY

GQLSTATUS 代码

00N83

状态描述

注意:成功完成 - 分配期间存在已封锁的服务器。在做出分配决策时存在已封锁的服务器。服务器 { $serverList } 已封锁。这会影响分配决策。

分类

TOPOLOGY

严重性级别

信息 (INFORMATION)

示例 67. 分配决策期间存在已封锁的服务器

该示例假设您有一个包含三个服务器的集群,其中服务器 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 已封锁。这会影响分配决策。

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

Table 34. 通知详情

Neo4j 代码

Neo.ClientNotification.Cluster.RequestedTopologyMatchedCurrentTopology

标题

<command> 无效。

描述

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

类别

TOPOLOGY

GQLSTATUS 代码

00N84

状态描述

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

分类

TOPOLOGY

严重性级别

信息 (INFORMATION)

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

该示例假设您有一个包含三个服务器的集群,以及一个具有两个主节点和一个从节点的拓扑的数据库 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 命令期间服务器已赶上进度

Table 35. 通知详情

Neo4j 代码

Neo.ClientNotification.Cluster.ServerCaughtUp

标题

服务器已赶上进度。

描述

位于地址 (%s) 的服务器 (%s) 已赶上进度。

类别

TOPOLOGY

GQLSTATUS 代码

03N85

状态描述

信息:服务器已赶上进度。位于地址 { $serverAddress } 的服务器 { $server } 已赶上进度。

分类

TOPOLOGY

严重性级别

信息 (INFORMATION)

示例 69. 具有两个服务器的 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 命令期间服务器失败

Table 36. 通知详情

Neo4j 代码

Neo.ClientNotification.Cluster.ServerFailed

标题

服务器失败。

描述

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

类别

TOPOLOGY

GQLSTATUS 代码

01N80

状态描述

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

分类

TOPOLOGY

严重性级别

WARNING

示例 70. WAIT 命令期间两个服务器中的一个失败
查询
CREATE DATABASE foo TOPOLOGY 2 PRIMARIES WAIT

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

返回的 GQLSTATUS 代码

03N85

返回的状态描述

信息:服务器已赶上进度。位于地址 localhost:20025 的服务器 ServerId{0e010000} 已赶上进度。

返回的 GQLSTATUS 代码

01N80

返回的状态描述

警告:服务器失败。位于地址 localhost:20026 的服务器 ServerId{0e020000} 失败:Caught up but has failure for DatabaseId{0db00002[foo]} Failure: java.nio.file.FileAlreadyExistsException: <…​>

改进建议

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

查询
CREATE DATABASE foo TOPOLOGY 2 PRIMARIES WAIT

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

返回代码描述

位于地址 localhost:20025 的服务器 ServerId{0e010000} 已赶上进度。

返回代码描述

位于地址 localhost:20026 的服务器 ServerId{0e020000} 失败:Caught up but has failure for DatabaseId{0db00002[foo]} Failure: java.nio.file.FileAlreadyExistsException: <…​>

改进建议

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

WAIT 命令期间服务器仍在赶上进度

Table 37. 通知详情

Neo4j 代码

Neo.ClientNotification.Cluster.ServerCatchingUp

标题

服务器仍在赶上进度。

描述

位于地址 (%s) 的服务器 (%s) 仍在赶上进度。

类别

TOPOLOGY

GQLSTATUS 代码

01N81

状态描述

警告:服务器正在赶上进度。位于地址 { $serverAddress } 的服务器 { $server } 仍在赶上进度。

分类

TOPOLOGY

严重性级别

WARNING

示例 71. 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 命令期间服务器不可用

表 38. 通知详情

Neo4j 代码

Neo.ClientNotification.Cluster.ServerNotAvailable

标题

服务器不可用。

描述

服务器 (%s) 不可用。

类别

TOPOLOGY

GQLSTATUS 代码

01N82

状态描述

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

分类

TOPOLOGY

严重性级别

WARNING

示例 72. 在 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(模式)通知

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

索引或约束已存在

表 39. 通知详情

Neo4j 代码

Neo.ClientNotification.Schema.IndexOrConstraintAlreadyExists

标题

<command> 无效。

描述

<conflicting> 已存在。

描述

%s 已存在。

类别

模式 (SCHEMA)

GQLSTATUS 代码

00NA0

状态描述

提示:成功完成 - 索引或约束已存在。命令 { $cmd } 未产生任何效果。由 { $idxOrConstrPat } 指定的索引或约束已存在。

严重性级别

信息 (INFORMATION)

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

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

假设在 (: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) 已存在。

假设在 (: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) 已存在。

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

假设在 (: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)

假设在 (: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)
示例 75. 当已存在相同的约束时创建约束

假设在 (: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 已存在。

假设在 (: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 已存在。

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

假设在 (: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

假设在 (: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

索引或约束不存在

表 40. 通知详情

Neo4j 代码

Neo.ClientNotification.Schema.IndexOrConstraintDoesNotExist

标题

<command> 无效。

描述

%s 不存在。

类别

模式 (SCHEMA)

GQLSTATUS 代码

00NA1

状态描述

提示:成功完成 - 索引或约束不存在。命令 { $cmd } 未产生任何效果。指定的索引或约束 { $idxOrConstr } 不存在。

严重性级别

信息 (INFORMATION)

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

00NA1

返回的状态描述

提示:成功完成 - 索引或约束不存在。DROP INDEX nonExistingIndex IF EXISTS 未产生任何效果。nonExistingIndex 不存在。

改进建议

请核实这是否为您预期的索引,并确保拼写正确。

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

DROP INDEX nonExistingIndex IF EXISTS 未产生任何效果。

返回代码的完整描述

nonExistingIndex 不存在。

改进建议

请核实这是否为您预期的索引,并确保拼写正确。

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

00NA1

返回的状态描述

提示:成功完成 - 索引或约束不存在。DROP CONSTRAINT nonExistingConstraint IF EXISTS 未产生任何效果。nonExistingConstraint 不存在。

改进建议

请核实这是否为您预期的约束,并确保拼写正确。

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

DROP CONSTRAINT nonExistingConstraint IF EXISTS 未产生任何效果。

返回代码的完整描述

nonExistingConstraint 不存在。

改进建议

请核实这是否为您预期的约束,并确保拼写正确。

GENERIC(通用)通知

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

子查询变量屏蔽

表 41. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.SubqueryVariableShadowing

标题

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

描述

子查询中的变量屏蔽了来自外部作用域的同名变量。如果您希望使用该变量,则必须使用变量作用域子句将其导入子查询中。(%s

类别

GENERIC

GQLSTATUS 代码

03N60

状态描述

信息:子查询变量屏蔽。子查询中的变量 { $variable } 使用了与外部查询中变量相同的名称。除非您希望将其作为新变量,否则请使用 { $clause } ({ $variable }) 导入外部作用域的变量。

分类

GENERIC

严重性级别

信息 (INFORMATION)

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

03N60

返回的状态描述

信息:子查询变量屏蔽。子查询中的变量 n 使用了与外部查询中变量相同的名称。除非您希望将其作为新变量,否则请使用 CALL (n) 导入外部作用域的变量。

改进建议

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

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

子查询中的变量屏蔽了来自外部作用域的同名变量。如果您希望使用该变量,则必须使用变量作用域子句将其导入子查询中。(被屏蔽的变量是:n

改进建议

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

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

多余的可选程序调用

表 42. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.RedundantOptionalProcedure

标题

当过程调用的是无效(void)过程时,使用 OPTIONAL 是多余的。

描述

由于 CALL %s 是一个无效过程,使用 OPTIONAL 是多余的。

类别

GENERIC

GQLSTATUS 代码

03N61

状态描述

信息:多余的可选程序调用。由于 CALL { $proc } 是一个无效过程,使用 OPTIONAL 是多余的。

分类

GENERIC

严重性级别

信息 (INFORMATION)

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

03N61

返回的状态描述

信息:多余的可选程序调用。由于 CALL db.createLabel 是一个无效过程,使用 OPTIONAL 是多余的。

改进建议

如果查询的预期行为是使用无效过程,则可以移除 OPTIONAL 关键字,且不会对查询产生影响。

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

由于 CALL db.createLabel 是一个无效过程,使用 OPTIONAL 是多余的。

改进建议

如果查询的预期行为是使用无效过程,则可以移除 OPTIONAL 关键字,且不会对查询产生影响。

CALL db.createLabel("A")

多余的可选子查询

表 43. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.RedundantOptionalSubquery

标题

CALL 是单元(unit)子查询时,使用 OPTIONAL 是多余的。

描述

由于 CALL 是一个单元子查询,使用 OPTIONAL 是多余的。

类别

GENERIC

GQLSTATUS 代码

03N62

状态描述

信息:多余的可选子查询。由于 CALL 是一个单元子查询,使用 OPTIONAL 是多余的。

分类

GENERIC

严重性级别

信息 (INFORMATION)

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

03N62

返回代码描述

信息:多余的可选子查询。由于 CALL 是一个单元子查询,使用 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})
}
返回代码描述

在单元子查询的情况下,Optional 是多余的。在单元子查询上使用 OPTIONAL 不会产生任何效果,可以将其移除。

改进建议

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

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

标识符屏蔽变量

表 44. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.IdentifierShadowingVariable

标题

标识符正在屏蔽作用域内的变量。

描述

%s 子句中的标识符 %s 与作用域内的变量同名。无论变量计算出什么结果,使用的都将是字面量 %s

类别

GENERIC

GQLSTATUS 代码

03N63

状态描述

信息:标识符屏蔽变量。{ $clause } 子句中的标识符 { $ident } 与作用域内的变量同名。无论变量计算出什么结果,使用的都将是字面量 { $ident }。

分类

GENERIC

严重性级别

信息 (INFORMATION)

示例 82. SEARCH 子句中用于索引名称的标识符屏蔽了作用域内的变量
查询
CYPHER 25
WITH "myPlotString" AS moviePlots
MATCH (m:Movie {title:'Matrix, The'})
MATCH (movie:Movie)
  SEARCH movie IN (
    VECTOR INDEX moviePlots
    FOR m.embedding
    LIMIT 5
  ) SCORE AS score
RETURN movie.title AS title, score, moviePlots
返回的 GQLSTATUS 代码

03N63

返回代码描述

信息:标识符屏蔽变量。VECTOR INDEX 子句中的标识符 moviePlots 与作用域内的变量同名。无论变量计算出什么结果,使用的都将是字面量 moviePlots

改进建议

请考虑将变量重命名为其他名称以避免混淆。

CYPHER 25
WITH "myPlotString" AS plotString
MATCH (m:Movie {title:'Matrix, The'})
MATCH (movie:Movie)
  SEARCH movie IN (
    VECTOR INDEX moviePlots
    FOR m.embedding
    LIMIT 5
  ) SCORE AS score
RETURN movie.title AS title, score, plotString
查询
CYPHER 25
WITH "myPlotString" AS moviePlots
MATCH (m:Movie {title:'Matrix, The'})
MATCH (movie:Movie)
  SEARCH movie IN (
    VECTOR INDEX moviePlots
    FOR m.embedding
    LIMIT 5
  ) SCORE AS score
RETURN movie.title AS title, score, moviePlots
返回代码描述

VECTOR INDEX 子句中的标识符 moviePlots 与作用域内的变量同名。无论变量计算出什么结果,使用的都将是字面量 moviePlots

改进建议

请考虑将变量重命名为其他名称以避免混淆。

CYPHER 25
WITH "myPlotString" AS plotString
MATCH (m:Movie {title:'Matrix, The'})
MATCH (movie:Movie)
  SEARCH movie IN (
    VECTOR INDEX moviePlots
    FOR m.embedding
    LIMIT 5
  ) SCORE AS score
RETURN movie.title AS title, score, plotString

缺少参数

表 45. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.ParameterNotProvided

标题

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

描述

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

类别

GENERIC

GQLSTATUS 代码

01N60

状态描述

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

分类

GENERIC

严重性级别

WARNING

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

01N60

返回的状态描述

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

改进建议

请提供参数以便缓存该计划。

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

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

改进建议

请提供参数以便缓存该计划。

过程或函数执行警告

表 46. 通知详情

Neo4j 代码

Neo.ClientNotification.Procedure.ProcedureWarning

标题

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

描述

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

类别

GENERIC

GQLSTATUS 代码

01N62

状态描述

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

分类

GENERIC

严重性级别

WARNING

不可满足的关系类型表达式

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

表 47. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.UnsatisfiableRelationshipTypeExpression

标题

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

描述

关系类型表达式无法满足。(%s

类别

GENERIC

GQLSTATUS 代码

01N61

状态描述

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

分类

GENERIC

严重性级别

WARNING

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

01N61

返回的状态描述

警告:不可满足的关系类型表达式。表达式 R1&R2 无法满足,因为关系必须恰好有一种类型。

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

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

重复的关系引用

表 48. 通知详情

Neo4j 代码

Neo.ClientNotification.Statement.RepeatedRelationshipReference

标题

由于关系变量被绑定多次,查询未返回任何结果。

描述

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

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

类别

GENERIC

GQLSTATUS 代码

01N63

状态描述

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

分类

GENERIC

严重性级别

WARNING

示例 85. 将关系变量绑定多次
查询
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
示例 86. 将变长关系变量绑定多次(在 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

$authRule

ABAC 认证规则名称。

$boltServerState

Bolt 服务器状态,例如 READY

$boltMsgLenLimit

Bolt 消息长度限制,例如 1000

$bytes

字节数。

$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

关系的 start(起点)或 end(终点)之一。

$entityId

节点或关系的 ID。

$entityType

一个节点或一个关系。

$expr

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

$exprType

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

$feat

自由格式的功能描述。

$field

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

$fun

函数名称,例如 collect()

$funClass

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

$funType

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

$graph

图的名称,例如 myGraph

$graphTypeDependence

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

$graphTypeElement

图类型的元素,例如 (:Node ⇒ { name :: STRING})(:Source)-[:REL ⇒]→(:Target)

$graphTypeReference

图类型引用,例如 (:Node ⇒)p

$graphTypeOperation

图类型操作,例如 SETADDDROPALTER 之一。

$hint

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

$hintList

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

$ident

通用标识符,例如 my_identifier

$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

映射键。

$mapKeyList

映射键列表,例如映射 {first: 1, second: 2} 中的 first 和 second

$matchMode

GPM 匹配模式,例如 REPEATABLE ELEMENTS

$msg

自由格式消息。

$msgTitle

自由格式消息标题。

$namespaceList

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

$operation

数学运算,例如 / by zero, >

$option

选项名称。

$optionList

选项名称列表。

$param

参数名称,例如 $pattern

$paramList

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

$pat

模式,例如 (:Person)

$pathMode

GPM 路径模式,例如 ACYCLIC

$pathModeList

GPM 路径模式列表,例如 TRAIL, ACYCLIC

$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

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

$schemaDescrType

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

$selector

GPM 路径选择器,例如 ALL PATHS, SHORTEST 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

$storeFormat

存储格式名称。"aligned", "block", "standard", "high_limit" 之一。

$syntax

Cypher 语法或关键字。

$temporal

时间值,例如 2025-02-18

$timeAmount

时间单位的整数值(数字)。

$timeUnit

常用时间单位名称,例如 seconds, minutes, hours

$token

Token 名称,例如 MyLabel, MyRelationshipType, myPropertyKey

$tokenId

Token ID。

$tokenType

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

$transactionId

运行中查询的事务 ID。

$typeDescription

类型的自由格式描述,例如 'a list'。

$upper

范围中可接受的最大值。

$url

URL,例如 https://example.com

$user

用户名,例如 neo4j

$value

某个值。

$valueList

值列表。

$valueType

Cypher 值类型,例如 STRING, BOOLEAN, INTEGER, LIST<STRING> 等。

$valueTypeList

Cypher 值类型列表。

$variable

变量名称,例如 n

$variableList

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

$version

版本,例如 CYPHER 25 中的 25