所有服务器通知代码列表
以下页面概述了 Neo4j 中的所有通知,以及一些场景及其可能的解决方案。
PERFORMANCE
通知
当查询使用代价高昂的操作且性能可能通过更改查询或添加索引来提高时,将返回性能通知。
笛卡尔积
当计划中存在笛卡尔积时,将返回此通知。
Neo4j 代码 |
|
标题 |
此查询在断开的模式之间构建笛卡尔积。 |
描述 |
如果查询的一部分包含多个断开的模式,则将在所有这些部分之间构建笛卡尔积。这可能会产生大量数据并减慢查询处理速度。虽然偶尔是故意的,但通常可以重新制定避免使用此交叉积的查询,也许是通过在不同部分之间添加关系或使用 OPTIONAL MATCH ( |
类别 |
|
GQLSTATUS 代码 |
|
状态描述 |
info: 笛卡尔积。断开的模式 |
分类 |
|
SeverityLevel |
|
- 查询
-
MATCH (c:Child), (p:Parent) RETURN c, p
- 返回代码的描述
-
如果查询的一部分包含多个断开的模式,则将在所有这些部分之间构建笛卡尔积。这可能会产生大量数据并减慢查询处理速度。虽然偶尔是故意的,但通常可以重新制定避免使用此交叉积的查询,也许是通过在不同部分之间添加关系或使用
OPTIONAL MATCH
(标识符为: (p
)) - 改进建议
-
如果需要笛卡尔积,则无法对该查询进行任何改进。然而,在许多情况下,您可能不需要所有子节点和父节点的组合,在这种情况下,可以对该查询进行改进。例如,如果您需要子节点及其父节点,则可以通过将查询重写为以下内容来改进它
MATCH (c:Child)-[:ChildOf]->(p:Parent) RETURN c, p
- 查询
-
MATCH (c:Child), (p:Parent) RETURN c, p
- 返回的 GQLSTATUS 代码
-
03N90
- 返回的状态描述
-
info: 笛卡尔积。断开的模式
(c:Child), (p:Parent)
构建笛卡尔积。笛卡尔积可能会产生大量数据并减慢查询处理速度。 - 改进建议
-
如果需要笛卡尔积,则无法对该查询进行任何改进。然而,在许多情况下,您可能不需要所有子节点和父节点的组合,在这种情况下,可以对该查询进行改进。例如,如果您需要子节点及其父节点,则可以通过将查询重写为以下内容来改进它
MATCH (c:Child)-[:ChildOf]->(p:Parent) RETURN c, p
无界可变长度模式
当在可变长度关系上未指定上限时,将返回此通知。
Neo4j 代码 |
|
标题 |
提供的模式是无界的,请考虑为节点跃迁次数添加上限。 |
描述 |
使用无界模式的最短路径可能会导致执行时间过长。建议在模式中的节点跃迁次数使用上限。 |
类别 |
|
GQLSTATUS 代码 |
|
状态描述 |
info: 无界可变长度模式。提供的模式 |
分类 |
|
SeverityLevel |
|
- 查询
-
MATCH p=shortestPath((n)-[*]->(m)) WHERE n <> m RETURN p
- 返回代码的描述
-
使用无界模式的最短路径可能会导致执行时间过长。建议在模式中的节点跃迁次数使用上限。
- 改进建议
-
如果您的图很大,此查询可能会非常慢。请考虑添加上限。
MATCH p=shortestPath((n)-[*..8]->(m)) WHERE n <> m RETURN p
- 查询
-
MATCH p=shortestPath((n)-[*]->(m)) WHERE n <> m RETURN p
- 返回的 GQLSTATUS 代码
-
03N91
- 返回的状态描述
-
info: 无界可变长度模式。提供的模式
(n)-[*]→(m)
是无界的。使用无界模式的最短路径可能会导致执行时间过长。在模式中的节点跃迁次数使用上限 (例如[*..5]
)。 - 改进建议
-
如果您的图很大,此查询可能会非常慢。请考虑添加上限。
MATCH p=shortestPath((n)-[*..8]->(m)) WHERE n <> m RETURN p
穷举最短路径
当在最短路径上给定的谓词需要检查整个路径才能确定其是否有效时,将返回此通知,最短路径可能会回退到穷举搜索算法。有关详细信息,请参阅 Cypher 手册 → 最短路径 - 路径上的额外谓词检查。
Neo4j 代码 |
|
标题 |
已为您的查询规划了穷举最短路径,这意味着最短路径图算法可能不会用于查找最短路径。因此,可能会使用所有路径的穷举枚举来查找请求的最短路径。 |
描述 |
使用具有穷举搜索回退的最短路径可能会导致查询速度变慢,因为最短路径图算法可能不适用于这种情况。建议在 |
类别 |
|
GQLSTATUS 代码 |
|
状态描述 |
info: 穷举最短路径。由于存在谓词 |
分类 |
|
SeverityLevel |
|
- 查询
-
MATCH p = shortestPath(()-[*..42]-()) WHERE ANY(n in nodes(p) WHERE n:Label) RETURN p
- 返回代码的描述
-
使用具有穷举搜索回退的最短路径可能会导致查询速度变慢,因为最短路径图算法可能不适用于这种情况。建议在
MATCH
包含最短路径与该路径上的存在谓词之间引入WITH
。 - 改进建议
-
通过在
MATCH
子句后引入WITH
来分离谓词。MATCH p = shortestPath(()-[*..42]-()) WITH p WHERE ANY(n in nodes(p) WHERE n:Label) RETURN p
- 查询
-
MATCH p = shortestPath(()-[*..42]-()) WHERE ANY(n in nodes(p) WHERE n:Label) RETURN p
- 返回的 GQLSTATUS 代码
-
03N92
- 返回的状态描述
-
info: 穷举最短路径。由于存在谓词
ANY(n in nodes(p) WHERE n:Label)
,查询以穷举最短路径运行。可以使用WITH
将MATCH
与存在谓词分开。 - 改进建议
-
通过在
MATCH
子句后引入WITH
来分离谓词。MATCH p = shortestPath(()-[*..42]-()) WITH p WHERE ANY(n in nodes(p) WHERE n:Label) RETURN p
无适用索引
当使用 LOAD CSV
且 MATCH
或 MERGE
子句匹配未索引的标签时,将返回此通知。这可能在大型数据集上执行效果不佳。添加索引可以提高查询速度。
Neo4j 代码 |
|
标题 |
添加模式索引可以加快此查询的速度。 |
描述 |
使用 |
类别 |
|
GQLSTATUS 代码 |
|
状态描述 |
info: 没有适用索引。 |
分类 |
|
SeverityLevel |
|
LOAD CSV
与 MATCH
或 MERGE
结合使用- 查询
-
LOAD CSV FROM 'file:///ignore/ignore.csv' AS line WITH * MATCH (n:Person{name:line[0]}) RETURN line, n
- 返回代码的描述
-
使用
LOAD CSV
后面跟着MATCH
或MERGE
匹配未索引的标签在大型数据集上很可能执行效果不佳。请考虑使用模式索引。 - 改进建议
-
为标签和匹配属性创建索引。
CREATE INDEX FOR (n:Person) ON (n.name)
- 查询
-
LOAD CSV FROM 'file:///ignore/ignore.csv' AS line WITH * MATCH (n:Person{name:line[0]}) RETURN line, n
- 返回的 GQLSTATUS 代码
-
03N93
- 返回的状态描述
-
info: 没有适用索引。
LOAD CSV
与MATCH
或MERGE
结合使用,但标签没有索引,可能会导致执行时间过长。请考虑为标签Person
添加索引。 - 改进建议
-
为标签和匹配属性创建索引。
CREATE INDEX FOR (n:Person) ON (n.name)
急切操作符
当查询的执行计划包含Eager
操作符时,将返回此通知。
Neo4j 代码 |
|
标题 |
此查询的执行计划包含 Eager 操作符,它强制所有依赖数据在继续执行之前在主内存中物化。 |
描述 |
在执行计划包含 Eager 操作符的查询中,将大型数据集与 |
类别 |
|
GQLSTATUS 代码 |
|
状态描述 |
info: 急切操作符。查询执行计划包含 |
分类 |
|
SeverityLevel |
|
LOAD CSV
与急切操作符结合使用LOAD CSV
与急切操作符结合使用可能会占用大量内存。
- 查询
-
LOAD CSV FROM 'file:///ignore/ignore.csv' AS line MATCH (n:Person{name:line[0]}) DELETE n RETURN line
- 返回代码的描述
-
在执行计划包含 Eager 操作符的查询中,将大型数据集与
LOAD CSV
结合使用,可能会消耗大量内存,并且执行效果可能不佳。有关更多信息以及如何避免问题的提示,请参阅 Neo4j 手册中关于 Eager 操作符的条目。 - 改进建议
-
有关更多信息以及如何避免问题的提示,请参阅 Cypher 手册 → 急切操作符。在本例中,查询可以改写为以下形式:
LOAD CSV FROM 'file:///ignore/ignore.csv' AS line CALL { WITH line MATCH (n:Person{name:line[0]}) DELETE n } RETURN line
- 查询
-
LOAD CSV FROM 'file:///ignore/ignore.csv' AS line MATCH (n:Person{name:line[0]}) DELETE n RETURN line
- 返回的 GQLSTATUS 代码
-
03N94
- 返回的状态描述
-
info: 急切操作符。查询执行计划包含
Eager
操作符。LOAD CSV
与Eager
结合使用可能会消耗大量内存。 - 改进建议
-
有关更多信息以及如何避免问题的提示,请参阅 Cypher 手册 → 急切操作符。在本例中,查询可以改写为以下形式:
LOAD CSV FROM 'file:///ignore/ignore.csv' AS line CALL { WITH line MATCH (n:Person{name:line[0]}) DELETE n } RETURN line
动态属性
Neo4j 代码 |
|
标题 |
使用动态属性的查询将不会对这些属性使用索引查找或索引扫描。 |
描述 |
使用动态属性使得无法对此查询( |
类别 |
|
GQLSTATUS 代码 |
|
状态描述 |
info: 动态属性。标签/类型 |
分类 |
|
SeverityLevel |
|
- 查询
-
MATCH (n:Person) WHERE n[$prop] IS NOT NULL RETURN n;
- 返回代码的描述
-
使用动态属性使得无法对此查询(索引标签为:
Person
)使用索引查找。 - 改进建议
-
如果存在
(n:Person) ON (n.name)
的索引,则不会将其用于上述查询,因为查询使用的是动态属性。因此,如果存在索引,最好使用常量值。例如,如果prop
等于name
,则以下查询将能够使用索引:MATCH (n:Person) WHERE n.name IS NOT NULL RETURN n;
- 查询
-
MATCH (n:Person) WHERE n[$prop] IS NOT NULL RETURN n;
- 返回的 GQLSTATUS 代码
-
03N95
- 返回的状态描述
-
info: 动态属性。标签/类型
Person
上存在索引。无法对动态属性使用索引。请考虑使用静态属性。 - 改进建议
-
如果存在
(n:Person) ON (n.name)
的索引,则不会将其用于上述查询,因为查询使用的是动态属性。因此,如果存在索引,最好使用常量值。例如,如果prop
等于name
,则以下查询将能够使用索引:MATCH (n:Person) WHERE n.name IS NOT NULL RETURN n;
- 查询
-
MATCH ()-[r: KNOWS]->() WHERE r[$prop] IS NOT NULL RETURN r
- 返回代码的描述
-
使用动态属性使得无法对此查询(索引类型为:
KNOWS
)使用索引查找。 - 改进建议
-
与动态节点属性类似,如果可能,请使用常量值,尤其是在关系属性上存在索引的情况下。例如,如果
{ $prop }
等于since
,则可以将查询改写为:MATCH ()-[r: KNOWS]->() WHERE r.since IS NOT NULL RETURN r
- 查询
-
MATCH ()-[r: KNOWS]->() WHERE r[$prop] IS NOT NULL RETURN r
- 返回的 GQLSTATUS 代码
-
03N95
- 返回的状态描述
-
info: 动态属性。标签/类型
KNOWS
上存在索引。无法对动态属性使用索引。请考虑使用静态属性。 - 改进建议
-
与动态节点属性类似,如果可能,请使用常量值,尤其是在关系属性上存在索引的情况下。例如,如果
{ $prop }
等于since
,则可以将查询改写为:MATCH ()-[r: KNOWS]->() WHERE r.since IS NOT NULL RETURN r
代码生成失败
当无法为查询生成代码时,例如,当查询太大时,将创建CodeGenerationFailed
通知。有关特定查询的更多信息,请参阅 debug.log 文件中的堆栈跟踪。
Neo4j 代码 |
|
标题 |
数据库无法为查询生成代码。可以在 debug.log 中找到堆栈跟踪。 |
描述 |
数据库无法为查询生成代码。可以在 debug.log 中找到堆栈跟踪。(方法太大) |
类别 |
|
GQLSTATUS 代码 |
|
状态描述 |
info: 代码生成失败。代码生成失败,回退到解释型 $enginetype 引擎。可以在 debug.log 中找到堆栈跟踪。原因:$msg。 |
分类 |
|
SeverityLevel |
|
HINT
通知
当 Cypher 计划程序或运行时无法创建查询计划来满足指定提示(例如,JOIN
或 INDEX
)时,默认情况下会返回 HINT
通知。可以通过将配置 dbms.cypher.hints_error
设置为 true
来更改 Cypher 计划程序或运行时的此行为。在这种情况下,查询将返回错误。
连接提示无法满足
Neo4j 代码 |
|
标题 |
数据库无法规划提示连接。 |
描述 |
提示连接未计划。这可能是因为生成的计划中不包含连接键,请尝试使用其他连接键或重新构造查询。( |
类别 |
|
GQLSTATUS 代码 |
|
状态描述 |
warn: 连接提示无法满足。无法使用 |
分类 |
|
SeverityLevel |
|
JOIN
提示,但仍无法满足提示- 查询
-
MATCH (a:A) WITH a, 1 AS horizon OPTIONAL MATCH (a)-[r]->(b:B) USING JOIN ON a OPTIONAL MATCH (a)--(c) RETURN *
- 返回代码的描述
-
提示连接未计划。这可能是因为生成的计划中不包含连接键,请尝试使用其他连接键或重新构造查询。(提示连接键标识符为:
a
) - 改进建议
-
由于指定的变量在
OPTIONAL MATCH
之前,因此已绑定,无法应用JOIN
提示。此查询的唯一选择是删除提示或修改查询以允许使用它。
- 查询
-
MATCH (a:A) WITH a, 1 AS horizon OPTIONAL MATCH (a)-[r]->(b:B) USING JOIN ON a OPTIONAL MATCH (a)--(c) RETURN *
- 返回的 GQLSTATUS 代码
-
01N30
- 返回的状态描述
-
warn: 连接提示无法满足。无法使用
JOIN ON a
创建计划。尝试更改连接键或重新构造查询。 - 改进建议
-
由于指定的变量在
OPTIONAL MATCH
之前,因此已绑定,无法应用JOIN
提示。此查询的唯一选择是删除提示或修改查询以允许使用它。
提示索引未找到
Neo4j 代码 |
|
标题 |
请求(直接或间接)引用了不存在的索引。 |
描述 |
提示索引不存在,请检查架构( |
类别 |
|
GQLSTATUS 代码 |
|
状态描述 |
warn: 提示索引未找到。无法使用 |
分类 |
|
SeverityLevel |
|
- 查询
-
MATCH (a: Label) USING INDEX a:Label(id) WHERE a.id = 1 RETURN a
- 返回代码的描述
-
提示索引不存在,请检查架构(索引为:INDEX FOR (
a
:`Label`) ON (a
.id
)) - 改进建议
-
提示索引不存在,请确保标签和属性拼写正确。如果拼写正确,请创建索引或从查询中删除提示。
- 查询
-
MATCH (a: Label) USING INDEX a:Label(id) WHERE a.id = 1 RETURN a
- 返回的 GQLSTATUS 代码
-
01N31
- 返回的状态描述
-
warn: 提示索引未找到。无法使用
INDEX :Label(id)
创建计划,因为索引不存在。 - 改进建议
-
提示索引不存在,请确保标签和属性拼写正确。如果拼写正确,请创建索引或从查询中删除提示。
- 查询
-
MATCH ()-[r:Rel]-() USING INDEX r:Rel(id) WHERE r.id = 1 RETURN r
- 返回代码的描述
-
提示索引不存在,请检查架构(索引为:INDEX FOR ()-[
r
:`Rel`]-() ON (r
.id
)) - 改进建议
-
提示索引不存在,请确保关系类型和属性拼写正确。如果拼写正确,请创建索引或从查询中删除提示。
- 查询
-
MATCH ()-[r:Rel]-() USING INDEX r:Rel(id) WHERE r.id = 1 RETURN r
- 返回的 GQLSTATUS 代码
-
01N31
- 返回的状态描述
-
warn: 提示索引未找到。无法使用
INDEX :Rel(id)
创建计划,因为索引不存在。 - 改进建议
-
提示索引不存在,请确保关系类型和属性拼写正确。如果拼写正确,请创建索引或从查询中删除提示。
UNRECOGNIZED
通知
当查询或命令提及系统未知的实体时,将返回未识别的通知。
主数据库未找到
Neo4j 代码 |
|
标题 |
请求引用了不存在的主数据库。 |
描述 |
提供的主数据库当前不存在于 DBMS 中。此命令在创建此数据库之前不会生效。( |
类别 |
|
GQLSTATUS 代码 |
|
状态描述 |
note: 成功完成 - 主数据库未找到。数据库 |
分类 |
|
SeverityLevel |
|
home
数据库设置为不存在的数据库- 查询
-
CREATE USER john SET PASSWORD "secret" SET HOME DATABASE nej4
- 返回代码的描述
-
提供的主数据库当前不存在于 DBMS 中。此命令在创建此数据库之前不会生效。(主数据库:
nej4
) - 改进建议
-
请验证主数据库名称是否拼写错误。
- 查询
-
CREATE USER john SET PASSWORD "secret" SET HOME DATABASE nej4
- 返回的 GQLSTATUS 代码
-
00N50
- 返回的状态描述
-
note: 成功完成 - 主数据库未找到。数据库
ne4j
不存在。请验证拼写是否正确或创建数据库以使命令生效。 - 改进建议
-
请验证主数据库名称是否拼写错误。
未知标签
Neo4j 代码 |
|
标题 |
提供的标签不在数据库中。 |
描述 |
查询中的一个标签在数据库中不可用,请确保您没有拼写错误或标签在您在应用程序中运行此语句时可用。( |
类别 |
|
GQLSTATUS 代码 |
|
状态描述 |
warn: 未知标签。标签 |
分类 |
|
SeverityLevel |
|
- 查询
-
MATCH (n:Perso) RETURN n
- 返回代码的描述
-
查询中的一个标签在数据库中不可用,请确保您没有拼写错误或标签在您在应用程序中运行此语句时可用。(缺少的标签名为:
Perso
) - 改进建议
-
请验证标签是否拼写错误。如果您计划将来使用该标签创建节点,则无需更改。
- 查询
-
MATCH (n:Perso) RETURN n
- 返回的 GQLSTATUS 代码
-
01N50
- 返回的状态描述
-
warn: 未知标签。标签
Perso
不存在。请验证拼写是否正确。 - 改进建议
-
请验证标签是否拼写错误。如果您计划将来使用该标签创建节点,则无需更改。
未知关系类型
Neo4j 代码 |
|
标题 |
提供的关系类型不在数据库中。 |
描述 |
查询中的一个关系类型在数据库中不可用,请确保您没有拼写错误或标签在您在应用程序中运行此语句时可用。( |
类别 |
|
GQLSTATUS 代码 |
|
状态描述 |
warn: 未知关系类型。关系类型 |
分类 |
|
SeverityLevel |
|
- 查询
-
MATCH (n)-[:NonExistingType]->() RETURN n
- 返回代码的描述
-
您的查询中的一种关系类型在数据库中不可用,请确保您没有拼写错误,或者在应用程序中运行此语句时该标签可用(缺少的关系类型为:
NonExistingType
)。 - 改进建议
-
验证关系类型是否拼写错误。如果您计划将来创建这种类型的关系,则无需更改。
- 查询
-
MATCH (n)-[:NonExistingType]->() RETURN n
- 返回的 GQLSTATUS 代码
-
01N51
- 返回的状态描述
-
警告:未知关系类型。关系类型
NonExistingType
不存在。请验证拼写是否正确。 - 改进建议
-
验证关系类型是否拼写错误。如果您计划将来创建这种类型的关系,则无需更改。
未知属性键
Neo4j 代码 |
|
标题 |
提供的属性键不在数据库中 |
描述 |
您的查询中的一个属性名称在数据库中不可用,请确保您没有拼写错误,或者在应用程序中运行此语句时该标签可用( |
类别 |
|
GQLSTATUS 代码 |
|
状态描述 |
警告:未知属性键。属性 |
分类 |
|
SeverityLevel |
|
- 查询
-
MATCH (n:Person {nme:”Tom”}) RETURN n
- 返回代码的描述
-
您的查询中的一个属性名称在数据库中不可用,请确保您没有拼写错误,或者在应用程序中运行此语句时该标签可用(缺少的属性名称为:
nme
)。 - 改进建议
-
验证属性键是否拼写错误。如果您计划将来创建该属性键,则无需更改。
- 查询
-
MATCH (n:Person {nme:”Tom”}) RETURN n
- 返回的 GQLSTATUS 代码
-
01N52
- 返回的状态描述
-
警告:未知属性键。属性
nme
不存在。请验证拼写是否正确。 - 改进建议
-
验证属性键是否拼写错误。如果您计划将来创建该属性键,则无需更改。
聚合跳过空值
Neo4j 代码 |
|
标题 |
查询包含一个跳过空值的聚合函数。 |
描述 |
查询包含一个跳过空值的聚合函数。 |
类别 |
|
GQLSTATUS 代码 |
|
状态描述 |
警告:在集合函数中消除了空值。 |
分类 |
|
SeverityLevel |
|
- 查询
UNWIND [1, NULL, 2] AS i RETURN count(i) AS sum
- 返回代码的描述
-
查询包含一个跳过空值的聚合函数。
- 查询
-
UNWIND [1, NULL, 2] AS i RETURN count(i) AS sum
- 返回的 GQLSTATUS 代码
-
01G11
- 返回的状态描述
-
警告:在集合函数中消除了空值。
UNSUPPORTED
类别
当查询或命令尝试使用当前系统不支持的功能或使用不应在生产环境中使用的实验性功能时,将返回不支持的通知。
不支持的运行时
Neo4j 代码 |
|
标题 |
此查询不受所选运行时支持。 |
描述 |
此查询不支持所选的运行时,请使用不同的运行时或回退到默认运行时。( |
类别 |
|
GQLSTATUS 代码 |
|
状态描述 |
警告:不支持的运行时。该查询无法使用 |
分类 |
|
SeverityLevel |
|
- 查询
-
CYPHER runtime=pipelined SHOW INDEXES YIELD *
- 返回代码的描述
-
此查询不支持所选的运行时,请使用不同的运行时或回退到默认运行时。(Pipelined 尚未支持包括
ShowIndexes
在内的计划,请使用其他运行时。) - 改进建议
-
使用不同的运行时或删除运行时选项以使用默认运行时运行查询
SHOW INDEXES YIELD *
- 查询
-
EXPLAIN CYPHER runtime=pipelined SHOW INDEXES YIELD *
- 返回的 GQLSTATUS 代码
-
01N40
- 返回的状态描述
-
警告:不支持的运行时。该查询无法使用
runtime=pipelined
执行,使用runtime=slotted
。原因:Pipelined 尚未支持包括ShowIndexes
在内的计划,请使用其他运行时。 - 改进建议
-
使用不同的运行时或删除运行时选项以使用默认运行时运行查询
SHOW INDEXES YIELD *
RuntimeExperimental
从 Neo4j 5.14 开始,此通知的使用已删除。 |
Neo4j 代码 |
|
标题 |
此功能为实验性功能,不应在生产系统中使用。 |
描述 |
您正在使用实验性功能( |
类别 |
|
SeverityLevel |
|
- 查询
-
CYPHER runtime=parallel MATCH (n) RETURN (n)
- 返回代码的描述
-
您正在使用实验性功能(并行运行时为实验性功能,可能存在不稳定性并可能存在正确性问题。)
- 改进建议
-
不应在生产环境中使用并行运行时。选择另一个运行时或删除选项以使用默认运行时
MATCH (n) RETURN (n)
DEPRECATION
通知
弃用通知包含有关已弃用功能或功能的信息。重要的是要更改为新的功能,否则,查询可能会在将来的版本中中断。
功能已弃用
Neo4j 代码 |
|
标题 |
此功能已弃用,将在未来的版本中删除。 |
描述 |
|
类别 |
|
GQLSTATUS 代码 |
|
状态描述 |
警告:功能已弃用。$msg |
分类 |
|
SeverityLevel |
|
- 查询
-
CREATE DATABASE foo.bar
- 返回代码的描述
-
数据库和别名具有未转义的
.
已弃用,除非用于指示它们属于复合数据库。包含.
的名称应转义。(名称:foo.bar
) - 改进建议
-
如果不打算用于复合数据库,请使用字符
`
转义名称。CREATE DATABASE `foo.bar`
- 查询
-
CREATE DATABASE foo.bar
- 返回的 GQLSTATUS 代码
-
01N00
- 返回的状态描述
-
警告:功能已弃用。数据库和别名具有未转义的
.
已弃用,除非用于指示它们属于复合数据库。包含.
的名称应转义。(名称:foo.bar) - 改进建议
-
如果不打算用于复合数据库,请使用字符
`
转义名称。CREATE DATABASE `foo.bar`
UNION
子句中使用不同排序的返回项- 查询
-
RETURN 'val' as one, 'val' as two UNION RETURN 'val' as two, 'val' as one
- 返回代码的描述
-
UNION [ALL] 中的所有子查询应为返回列使用相同的排序。在 UNION [ALL] 子句中使用不同排序的返回项已弃用,并将从未来的版本中删除。
- 改进建议
-
在所有由
UNION
子句组合的子查询中,为返回列使用相同的排序。RETURN 'val' as one, 'val' as two UNION RETURN 'val' as one, 'val' as two
- 查询
-
RETURN 'val' as one, 'val' as two UNION RETURN 'val' as two, 'val' as one
- 返回的 GQLSTATUS 代码
-
01N00
- 返回的状态描述
-
警告:功能已弃用。UNION [ALL] 中的所有子查询应为返回列使用相同的排序。在 UNION [ALL] 子句中使用不同排序的返回项已弃用,并将从未来的版本中删除。
- 改进建议
-
在所有由
UNION
子句组合的子查询中,为返回列使用相同的排序。RETURN 'val' as one, 'val' as two UNION RETURN 'val' as one, 'val' as two
- 查询
-
RETURN 1 as my\u0085identifier
- 返回代码的描述
-
Unicode 字符
\u0085
已弃用,用于未转义的标识符,将来将被视为空格字符。要继续使用它,请通过在标识符my\u0085identifier
周围添加反引号来转义标识符。
- 查询
-
RETURN 1 as my\u0085identifier
- 返回的 GQLSTATUS 代码
-
01N00
- 返回的状态描述
-
警告:功能已弃用。Unicode 字符
\u0085
已弃用,用于未转义的标识符,将来将被视为空格字符。要继续使用它,请通过在标识符my\u0085identifier
周围添加反引号来转义标识符。
具有替换的功能已弃用
Neo4j 代码 |
|
标题 |
此功能已弃用,将在未来的版本中删除。 |
描述 |
|
类别 |
|
GQLSTATUS 代码 |
|
状态描述 |
警告:具有替换的功能已弃用。 |
分类 |
|
SeverityLevel |
|
|:
- 查询
-
MATCH (a)-[:A|:B|:C]-() RETURN *
- 返回代码的描述
-
在将来的版本中,在替代关系类型的分隔中使用冒号的语义将发生变化。(请改用 ':A|B|C')
- 改进建议
-
删除关系类型表达式中的冒号。
MATCH (a)-[:A|B|C]-() RETURN *
- 查询
-
MATCH (a)-[:A|:B|:C]-() RETURN *
- 返回的 GQLSTATUS 代码
-
01N01
- 返回的状态描述
-
警告:具有替换的功能已弃用。
:A|:B|:C
已弃用。它被:A|B|C
替换。 - 改进建议
-
删除关系类型表达式中的冒号。
MATCH (a)-[:A|B|C]-() RETURN *
- 查询
-
MATCH (a)-[]-(b) SET a = b
- 返回代码的描述
-
使用节点或关系设置属性已弃用,并将从未来的版本中删除。请改用
properties()
。 - 改进建议
-
使用
properties()
函数从b
获取所有属性。MATCH (a)-[]-(b) SET a = properties(b)
- 查询
-
MATCH (a)-[]-(b) SET a = b
- 返回的 GQLSTATUS 代码
-
01N01
- 返回的状态描述
-
警告:具有替换的功能已弃用。
SET a = b
已弃用。它被SET a = properties(b)
替换。 - 改进建议
-
使用
properties()
函数从b
获取所有属性。MATCH (a)-[]-(b) SET a = properties(b)
- 查询
-
MATCH (a)-[r]-(b) SET a += r
- 返回代码的描述
-
使用节点或关系设置属性已弃用,并将从未来的版本中删除。请改用
properties()
。 - 改进建议
-
使用
properties()
函数从r
获取所有属性。MATCH (a)-[r]-(b) SET a += properties(r)
- 查询
-
MATCH (a)-[r]-(b) SET a += r
- 返回的 GQLSTATUS 代码
-
01N01
- 返回的状态描述
-
警告:具有替换的功能已弃用。
SET a += r
已弃用。它被SET a += properties(r)
替换。 - 改进建议
-
使用
properties()
函数从r
获取所有属性。MATCH (a)-[r]-(b) SET a += properties(r)
- 查询
-
MATCH (a:Start), shortestPath((a)-[r]->()) RETURN a
- 返回代码的描述
-
使用具有固定长度关系的
shortestPath
和allShortestPaths
已弃用,并将从未来的版本中删除。请改用长度为1 [r*1..1]
的路径或使用限制的 Match。 - 改进建议
-
如果关系长度是固定的,则没有理由搜索最短路径。相反,您可以将其重写为以下内容
MATCH (a: Start)-[r]->(b: End) RETURN b LIMIT 1
- 查询
-
MATCH (a:Start), shortestPath((a)-[r]->()) RETURN a
- 返回的 GQLSTATUS 代码
-
01N01
- 返回的状态描述
-
警告:具有替换的功能已弃用。
shortestPath((a)-[r]→())
已弃用。它被shortestPath((n)-[r*1..1]→(m))
替换。 - 改进建议
-
如果关系长度是固定的,则没有理由搜索最短路径。相反,您可以将其重写为以下内容
MATCH (a: Start)-[r]->(b: End) RETURN b LIMIT 1
- 查询
-
CYPHER runtime = interpreted MATCH (n) RETURN n
- 返回代码的描述
-
该查询使用了已弃用的运行时选项。(
'runtime=interpreted'
已弃用,请改用'runtime=slotted'
) - 改进建议
-
运行时
interpreted
已被弃用,现已使用其他运行时。或者,您可以删除运行时选项以使用默认运行时。MATCH (n) RETURN n
- 查询
-
CYPHER runtime = interpreted MATCH (n) RETURN n
- 返回的 GQLSTATUS 代码
-
01N01
- 返回的状态描述
-
警告:功能已弃用并有替代方案。
runtime=interpreted
已被弃用。它被runtime=slotted
替换。 - 改进建议
-
运行时
interpreted
已被弃用,现已使用其他运行时。或者,您可以删除运行时选项以使用默认运行时。MATCH (n) RETURN n
text-1.0
索引提供程序- 查询
-
CREATE TEXT INDEX FOR (n:Label) ON (n.prop) OPTIONS {indexProvider : 'text-1.0'}
- 返回代码的描述
-
用于文本索引的
text-1.0
提供程序已弃用,将在未来的版本中删除。请改用text-2.0
。 - 改进建议
-
使用值
text-2.0
更新选项indexProvider
。CREATE TEXT INDEX FOR (n:Label) ON (n.prop) OPTIONS {indexProvider : 'text-2.0'}
- 查询
-
CREATE TEXT INDEX FOR (n:Label) ON (n.prop) OPTIONS {indexProvider : 'text-1.0'}
- 返回的 GQLSTATUS 代码
-
01N01
- 返回的状态描述
-
警告:功能已弃用并有替代方案。
text-1.0
已被弃用。它被text-2.0
替换。 - 改进建议
-
使用值
text-2.0
更新选项indexProvider
。CREATE TEXT INDEX FOR (n:Label) ON (n.prop) OPTIONS {indexProvider : 'text-2.0'}
CALL unsupported.dbms.shutdown
- 返回代码的描述
-
查询使用了已弃用的过程:
'unsupported.dbms.shutdown'
。 - 改进建议
-
删除已弃用过程的使用。如果有建议的替代方案,请更新为使用替代方案。
CALL cdc.query
- 返回的 GQLSTATUS 代码
-
01N01
- 返回的状态描述
-
警告:功能已弃用并有替代方案。
cdc.query
已被弃用。它被db.cdc.query
替换。
CALL unsupported.dbms.shutdown
- 返回的 GQLSTATUS 代码
-
01N02
- 返回的状态描述
-
警告:功能已弃用且无替代方案。
unsupported.dbms.shutdown
已被弃用,并将被删除且没有替代方案。
- 查询
-
MATCH (a) RETURN id(a)
- 返回代码的描述
-
查询使用了已弃用的函数:
id
。 - 改进建议
-
改用
elementId()
函数。MATCH (a) RETURN elementId(a)
- 查询
-
MATCH (a) RETURN id(a)
- 返回的 GQLSTATUS 代码
-
01N01
- 返回的状态描述
-
警告:功能已弃用并有替代方案。
id
已被弃用。它被elementId()
替换。 - 改进建议
-
改用
elementId()
函数。MATCH (a) RETURN elementId(a)
- 查询
-
MATCH (a) RETURN id(a)
- 返回的 GQLSTATUS 代码
-
01N02
- 返回的状态描述
-
警告:功能已弃用且无替代方案。
id
已被弃用,并将被删除且没有替代方案。
没有未来替代方案的已弃用功能
Neo4j 代码 |
|
标题 |
此功能已弃用,将在未来的版本中删除。 |
描述 |
|
类别 |
|
GQLSTATUS 代码 |
|
状态描述 |
警告:功能已弃用且无替代方案。 |
分类 |
|
SeverityLevel |
|
connectComponentsPlanner
- 查询
-
CYPHER connectComponentsPlanner=greedy MATCH (a), (b) RETURN *
- 返回代码的描述
-
Cypher 查询选项
connectComponentsPlanner
已被弃用,并将被删除且没有替代方案。产品在组合子计划时使用基于成本的 IDP 搜索算法的默认行为将被保留。有关更多信息,请参阅 Cypher 手册 → Cypher 计划程序.
- 查询
-
CYPHER connectComponentsPlanner=greedy MATCH (a), (b) RETURN *
- 返回的 GQLSTATUS 代码
-
01N02
- 返回的状态描述
-
警告:功能已弃用且无替代方案。
connectComponentsPlanner
已被弃用,并将被删除且没有替代方案。
SECURITY
类别
安全通知表明查询或命令的结果可能存在潜在的安全问题。验证这是否是您查询或命令的预期行为。
角色或权限未分配
Neo4j 代码 |
|
标题 |
|
描述 |
|
类别 |
|
GQLSTATUS 代码 |
|
状态描述 |
注意:成功完成 - 角色或权限未分配。 |
分类 |
|
SeverityLevel |
|
*<command>
和 cmd
可以是用户提供的完整命令或提供的命令的子集。
- 命令
-
REVOKE ROLE admin, reader FROM jane
- 返回代码的标题
-
REVOKE ROLE reader FROM jane
无效。 - 返回代码的描述
-
用户没有该角色。有关更多信息,请参阅状态码文档。
- 改进建议
-
验证这是否是预期的角色和用户。
- 命令
-
REVOKE ROLE admin, reader FROM jane
- 返回的 GQLSTATUS 代码
-
00N71
- 返回的状态描述
-
注意:成功完成 - 角色或权限未分配。
REVOKE ROLE reader FROM jane
无效。角色或权限未分配。 - 改进建议
-
验证这是否是预期的角色和用户。
- 命令
-
REVOKE WRITE ON GRAPH * FROM reader
- 返回代码的标题
-
REVOKE DENY WRITE ON GRAPH * FROM reader
无效。 - 返回代码的描述
-
该角色没有该权限。有关更多信息,请参阅状态码文档。
- 改进建议
-
验证这是否是预期的权限和角色。
- 命令
-
REVOKE WRITE ON GRAPH * FROM reader
- 返回的 GQLSTATUS 代码
-
00N71
- 返回的状态描述
-
注意:成功完成 - 角色或权限未分配。
REVOKE DENY WRITE ON GRAPH * FROM reader
无效。角色或权限未分配。 - 改进建议
-
验证这是否是预期的权限和角色。
角色或权限已分配
Neo4j 代码 |
|
标题 |
|
描述 |
|
类别 |
|
GQLSTATUS 代码 |
|
状态描述 |
注意:成功完成 - 角色或权限已分配。 |
分类 |
|
SeverityLevel |
|
*<command>
和 cmd
可以是用户提供的完整命令或提供的命令的子集。
- 命令
-
GRANT ROLE admin TO john
- 返回代码的标题
-
GRANT ROLE admin TO john
无效。 - 返回代码的描述
-
用户已拥有该角色。有关更多信息,请参阅状态码文档。
- 改进建议
-
验证这是否是预期的角色和用户。
- 命令
-
GRANT ROLE admin TO john
- 返回的 GQLSTATUS 代码
-
00N70
- 返回的状态描述
-
注意:成功完成 - 角色或权限已分配。
GRANT ROLE admin TO john
无效。角色或权限已分配。 - 改进建议
-
验证这是否是预期的角色和用户。
- 命令
-
GRANT TRAVERSE ON GRAPH * TO reader
- 返回代码的标题
-
GRANT TRAVERSE ON GRAPH * NODE * TO reader
无效。 - 返回代码的描述
-
该角色已拥有该权限。有关更多信息,请参阅状态码文档。
- 改进建议
-
验证这是否是预期的权限和角色。
- 命令
-
GRANT TRAVERSE ON GRAPH * TO reader
- 返回的 GQLSTATUS 代码
-
00N70
- 返回的状态描述
-
注意:成功完成 - 角色或权限已分配。
GRANT TRAVERSE ON GRAPH * TO reader
无效。角色或权限已分配。 - 改进建议
-
验证这是否是预期的权限和角色。
无法撤销命令
Neo4j 代码 |
|
标题 |
|
描述 |
角色不存在。确保没有拼写错误。此通知将在未来的主要版本中变为错误。有关更多信息,请参阅状态码文档。 |
类别 |
|
GQLSTATUS 代码 |
|
状态描述 |
警告:无法撤销命令。 |
分类 |
|
SeverityLevel |
|
*<command>
和 cmd
可以是用户提供的完整命令或提供的命令的子集。
- 命令
-
REVOKE ROLE manager, reader FROM jane
- 返回代码的标题
-
REVOKE ROLE manager FROM jane
无效。 - 返回代码的描述
-
角色不存在。确保没有拼写错误。此通知将在未来的主要版本中变为错误。有关更多信息,请参阅状态码文档。
- 改进建议
-
验证这是否是预期的角色,以及是否拼写正确。
- 命令
-
REVOKE ROLE manager, reader FROM jane
- 返回的 GQLSTATUS 代码
-
01N70
- 返回的状态描述
-
警告:无法撤销命令。
REVOKE ROLE manager FROM jane
无效。角色不存在。确保没有拼写错误。此通知将在未来的主要版本中变为错误。 - 改进建议
-
验证这是否是预期的角色,以及是否拼写正确。
- 命令
-
REVOKE ROLE reader FROM alice
- 返回代码的标题
-
REVOKE ROLE reader FROM alice
无效。 - 返回代码的描述
-
用户不存在。确保没有拼写错误。此通知将在未来的主要版本中变为错误。
- 改进建议
-
验证这是否是预期的用户,以及是否拼写正确。
- 命令
-
REVOKE ROLE reader FROM alice
- 返回的 GQLSTATUS 代码
-
01N70
- 返回的状态描述
-
警告:无法撤销命令。
REVOKE ROLE reader FROM alice
无效。用户不存在。确保没有拼写错误。此通知将在未来的主要版本中变为错误。有关更多信息,请参阅状态码文档。o - 改进建议
-
验证这是否是预期的用户,以及是否拼写正确。
- 命令
-
REVOKE GRANT WRITE ON GRAPH * FROM manager
- 返回代码的标题
-
REVOKE GRANT WRITE ON GRAPH * FROM manager
无效。 - 返回代码的描述
-
角色不存在。确保没有拼写错误。此通知将在未来的主要版本中变为错误。有关更多信息,请参阅状态码文档。
- 改进建议
-
验证这是否是预期的角色,以及是否拼写正确。
- 命令
-
REVOKE GRANT WRITE ON GRAPH * FROM manager
- 返回的 GQLSTATUS 代码
-
01N70
- 返回的状态描述
-
警告:无法撤销命令。
REVOKE GRANT WRITE ON GRAPH * FROM manager
无效。角色不存在。确保没有拼写错误。此通知将在未来的主要版本中变为错误。 - 改进建议
-
验证这是否是预期的角色,以及是否拼写正确。
- 命令
-
REVOKE GRANT WRITE ON GRAPH neo3j FROM editor
- 返回代码的标题
-
REVOKE GRANT WRITE ON GRAPH neo3j FROM editor
无效。 - 返回代码的描述
-
数据库
neo3j
不存在。确保没有拼写错误。此通知将在未来的主要版本中变为错误。有关更多信息,请参阅状态码文档。 - 改进建议
-
验证这是否是预期的图,以及是否拼写正确。
- 命令
-
REVOKE GRANT WRITE ON GRAPH neo3j FROM editor
- 返回的 GQLSTATUS 代码
-
01N70
- 返回的状态描述
-
警告:无法撤销命令。
REVOKE GRANT WRITE ON GRAPH neo3j FROM editor
无效。数据库neo3j
不存在。确保没有拼写错误。此通知将在未来的主要版本中变为错误。 - 改进建议
-
验证这是否是预期的图,以及是否拼写正确。
- 命令
-
REVOKE GRANT ACCESS ON DATABASE neo3j FROM editor
- 返回代码的标题
-
REVOKE GRANT ACCESS ON DATABASE neo3j FROM editor
无效。 - 返回代码的描述
-
数据库
neo3j
不存在。确保没有拼写错误。此通知将在未来的主要版本中变为错误。有关更多信息,请参阅状态码文档。 - 改进建议
-
验证这是否是预期的数据库,以及是否拼写正确。
- 命令
-
REVOKE GRANT ACCESS ON DATABASE neo3j FROM editor
- 返回的 GQLSTATUS 代码
-
01N70
- 返回的状态描述
-
警告:无法撤销命令。
REVOKE GRANT ACCESS ON DATABASE neo3j FROM editor
无效。数据库neo3j
不存在。确保没有拼写错误。此通知将在未来的主要版本中变为错误。 - 改进建议
-
验证这是否是预期的数据库,以及是否拼写正确。
- 参数
-
{ "graph": "*" }
- 命令
-
REVOKE GRANT CREATE ON GRAPH $graph FROM PUBLIC
- 返回代码的标题
-
REVOKE GRANT CREATE ON GRAPH $graph FROM PUBLIC
无效。 - 返回代码的描述
-
参数化数据库和图名称不支持通配符。确保没有拼写错误。此通知将在未来的主要版本中变为错误。有关更多信息,请参阅状态码文档。
- 改进建议
-
使用
GRAPH *
(不带参数)撤销对所有图的权限。
- 参数
-
{ "graph": "*" }
- 命令
-
REVOKE GRANT CREATE ON GRAPH $graph FROM PUBLIC
- 返回的 GQLSTATUS 代码
-
01N70
- 返回的状态描述
-
警告:无法撤销命令。
REVOKE GRANT CREATE ON GRAPH $graph FROM PUBLIC
无效。数据库*
不存在。确保没有拼写错误。此通知将在未来的主要版本中变为错误。 - 改进建议
-
使用
GRAPH *
(不带参数)撤销对所有图的权限。
- 参数
-
{ "database": "*" }
- 命令
-
REVOKE GRANT ACCESS ON DATABASE $database FROM PUBLIC
- 返回代码的标题
-
REVOKE GRANT ACCESS ON DATABASE $database FROM PUBLIC
无效。 - 返回代码的描述
-
参数化数据库和图名称不支持通配符。确保没有拼写错误。此通知将在未来的主要版本中变为错误。有关更多信息,请参阅状态码文档。
- 改进建议
-
使用
DATABASE *
(不带参数)撤销对所有数据库的权限。
- 参数
-
{ "database": "*" }
- 命令
-
REVOKE GRANT ACCESS ON DATABASE $database FROM PUBLIC
- 返回的 GQLSTATUS 代码
-
01N70
- 返回的状态描述
-
警告:无法撤销命令。
REVOKE GRANT ACCESS ON DATABASE $database FROM PUBLIC
无效。数据库*
不存在。确保没有拼写错误。此通知将在未来的主要版本中变为错误。 - 改进建议
-
使用
DATABASE *
(不带参数)撤销对所有数据库的权限。
AuthProviderNotDefined
Neo4j 代码 |
|
标题 |
身份验证提供程序未定义。 |
描述 |
身份验证提供程序 |
类别 |
|
GQLSTATUS 代码 |
|
状态描述 |
注意:成功完成 - 未定义的身份验证提供程序。身份验证提供程序 { $auth } 在配置中未定义。验证拼写是否正确,或者在配置中定义 { $auth }。 |
分类 |
|
SeverityLevel |
|
- 命令
-
CREATE USER foo SET AUTH 'unknownProvider' { SET ID 'idString' }
- 返回代码的描述
-
身份验证提供程序
unknownProvider
在配置中未定义。验证拼写是否正确,或者在配置中定义unknownProvider
。 - 改进建议
-
确保提供的提供程序正确,或者如果提供程序不正确,请替换它。如果提供程序正确,请确保在
dbms.security.authentication_providers
和dbms.security.authorization_providers
中的一个或两个中将其添加为已知身份验证提供程序。
- 命令
-
CREATE 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
中的一个或两个中将其添加为已知身份验证提供程序。
- 命令
-
ALTER USER foo SET AUTH 'unknownProvider' { SET ID 'idString' }
- 返回的 GQLSTATUS 代码
-
00N72
- 返回的状态描述
-
注意:成功完成 - 未定义的身份验证提供程序。身份验证提供程序
unknownProvider
在配置中未定义。验证拼写是否正确,或者在配置中定义unknownProvider
。 - 改进建议
-
确保提供的提供程序正确,或者如果提供程序不正确,请替换它。如果提供程序正确,请确保在
dbms.security.authentication_providers
和dbms.security.authorization_providers
中的一个或两个中将其添加为已知身份验证提供程序。
ExternalAuthNotEnabled
Neo4j 代码 |
|
标题 |
用户的外部身份验证未启用。 |
描述 |
使用设置 |
类别 |
|
GQLSTATUS 代码 |
|
状态描述 |
警告:外部身份验证已禁用。使用设置 'dbms.security.require_local_user' 启用外部身份验证。 |
分类 |
|
SeverityLevel |
|
- 命令
-
CREATE USER foo SET AUTH 'exampleProvider' { SET ID 'idString' }
- 改进建议
-
通过
dbms.security.require_local_user
设置启用链接用户。在启用之前,新的外部身份验证将被忽略,当前的外部身份验证行为将继续适用。
- 命令
-
CREATE USER foo SET AUTH 'exampleProvider' { SET ID 'idString' }
- 返回的 GQLSTATUS 代码
-
01N71
- 返回的状态描述
-
警告:外部身份验证已禁用。使用设置 'dbms.security.require_local_user' 启用外部身份验证。
- 改进建议
-
通过
dbms.security.require_local_user
设置启用链接用户。在启用之前,新的外部身份验证将被忽略,当前的外部身份验证行为将继续适用。
- 命令
-
ALTER USER foo SET AUTH 'exampleProvider' { SET ID 'idString' }
- 改进建议
-
通过
dbms.security.require_local_user
设置启用链接用户。在启用之前,新的外部身份验证将被忽略,当前的外部身份验证行为将继续适用。
- 命令
-
ALTER USER foo SET AUTH 'exampleProvider' { SET ID 'idString' }
- 返回的 GQLSTATUS 代码
-
01N71
- 返回的状态描述
-
警告:外部身份验证已禁用。使用设置 'dbms.security.require_local_user' 启用外部身份验证。
- 改进建议
-
通过
dbms.security.require_local_user
设置启用链接用户。在启用之前,新的外部身份验证将被忽略,当前的外部身份验证行为将继续适用。
TOPOLOGY
类别
拓扑通知提供与管理数据库和服务器相关的其他信息。
服务器已启用
Neo4j 代码 |
|
标题 |
|
描述 |
服务器 |
类别 |
|
GQLSTATUS 代码 |
|
状态描述 |
注意:成功完成 - 服务器已启用。 |
分类 |
|
SeverityLevel |
|
- 命令
-
ENABLE SERVER "123e4567-e89b-12d3-a456-426614174000"
- 返回代码的描述
-
服务器
123e4567-e89b-12d3-a456-426614174000
已启用。请验证此服务器是否为目标服务器。
- 命令
-
ENABLE SERVER "123e4567-e89b-12d3-a456-426614174000"
- 返回的 GQLSTATUS 代码
-
00N80
- 返回的状态描述
-
注意:成功完成 - 服务器已启用。
ENABLE SERVER
无效。服务器123e4567-e89b-12d3-a456-426614174000
已启用。请验证此服务器是否为目标服务器。
服务器已被隔离
Neo4j 代码 |
|
标题 |
|
描述 |
服务器 |
类别 |
|
GQLSTATUS 代码 |
|
状态描述 |
注意:成功完成 - 服务器已被隔离。 |
分类 |
|
SeverityLevel |
|
- 命令
-
CORDON SERVER "123e4567-e89b-12d3-a456-426614174000"
- 返回代码的描述
-
服务器
123e4567-e89b-12d3-a456-426614174000
已被隔离。请验证此服务器是否为目标服务器。
- 命令
-
CORDON SERVER "123e4567-e89b-12d3-a456-426614174000"
- 返回的 GQLSTATUS 代码
-
00N81
- 返回的状态描述
-
注意:成功完成 - 服务器已被隔离。
CORDON SERVER
无效。服务器123e4567-e89b-12d3-a456-426614174000
已被隔离。请验证此服务器是否为目标服务器。
没有重新分配数据库
Neo4j 代码 |
|
标题 |
|
描述 |
没有重新分配数据库。目前没有更好的分配方案。 |
类别 |
|
GQLSTATUS 代码 |
|
状态描述 |
注意:成功完成 - 没有重新分配数据库。 |
分类 |
|
SeverityLevel |
|
- 命令
-
REALLOCATE DATABASES
- 返回代码的描述
-
没有重新分配数据库。目前没有更好的分配方案。
- 示例场景
-
场景 1: 集群已平衡。例如,当有三个服务器时,每个服务器都托管着数据库
foo
和bar
,这意味着所有数据库都分配给所有服务器。场景 2: 集群看起来不平衡,但服务器约束阻止您迁移到更好、更平衡的分配方案。例如,假设服务器 1 托管数据库
foo
和bar
,服务器 2 仅托管foo
,服务器 3 未托管任何数据库。那么,更好的分配方案将从服务器 1 将foo
迁移到服务器 3,但如果服务器 3 有约束deniedDatabases:['foo']}
,那么在该约束下,集群已平衡。
- 命令
-
REALLOCATE DATABASES
- 返回的 GQLSTATUS 代码
-
00N82
- 返回的状态描述
-
注意:成功完成 - 没有重新分配数据库。
REALLOCATE DATABASES
无效。没有重新分配数据库。目前没有更好的分配方案。 - 示例场景
-
场景 1: 集群已平衡。例如,当有三个服务器时,每个服务器都托管着数据库
foo
和bar
,这意味着所有数据库都分配给所有服务器。场景 2: 集群看起来不平衡,但服务器约束阻止您迁移到更好、更平衡的分配方案。例如,假设服务器 1 托管数据库
foo
和bar
,服务器 2 仅托管foo
,服务器 3 未托管任何数据库。那么,更好的分配方案将从服务器 1 将foo
迁移到服务器 3,但如果服务器 3 有约束deniedDatabases:['foo']}
,那么在该约束下,集群已平衡。
分配期间存在隔离的服务器
当 Cypher 管理命令触发分配决策并且某些服务器处于隔离状态时,将返回此通知。例如,CREATE DATABASE
、ALTER DATABASE
、DEALLOCATE DATABASES FROM SERVER[S]
和 ALTER DATABASE
会返回此通知。但是,REALLOCATE DATABASES
需要确保不存在任何隔离的服务器,因此不会返回此通知。
Neo4j 代码 |
|
标题 |
在进行分配决策时,存在隔离的服务器。 |
描述 |
服务器 |
类别 |
|
GQLSTATUS 代码 |
|
状态描述 |
注意:成功完成 - 分配期间存在隔离的服务器。在进行分配决策时,存在隔离的服务器。服务器 |
分类 |
|
SeverityLevel |
|
此示例假设您有一个包含三个服务器的集群,其中服务器 123e4567-e89b-12d3-a456-426614174000
使用 dbms.cluster.cordonServer
过程处于隔离状态。然后,以下命令将返回此通知。
- 命令
-
CREATE DATABASE foo TOPOLOGY 2 PRIMARIES
- 返回代码的描述
-
服务器
123e4567-e89b-12d3-a456-426614174000
处于隔离状态。这可能会影响分配决策。
此示例假设您有一个包含三个服务器的集群,其中服务器 123e4567-e89b-12d3-a456-426614174000
使用 dbms.cluster.cordonServer
过程处于隔离状态。然后,以下命令将返回此通知。
- 命令
-
CREATE DATABASE foo TOPOLOGY 2 PRIMARIES
- 返回的 GQLSTATUS 代码
-
00N83
- 返回的状态描述
-
注意:成功完成 - 分配期间存在隔离的服务器。在进行分配决策时,存在隔离的服务器。服务器
123e4567-e89b-12d3-a456-426614174000
处于隔离状态。这可能会影响分配决策。
请求的拓扑与当前拓扑匹配
Neo4j 代码 |
|
标题 |
|
描述 |
请求的拓扑与当前拓扑匹配。没有更改分配。 |
类别 |
|
GQLSTATUS 代码 |
|
状态描述 |
注意:成功完成 - 请求的拓扑与当前拓扑匹配。 |
分类 |
|
SeverityLevel |
|
此示例假设您有一个包含三个服务器的集群,以及一个拓扑为两个主服务器和一个从服务器的数据库 foo
。
- 命令
-
ALTER DATABASE foo SET TOPOLOGY 2 PRIMARIES 1 SECONDARY
- 返回代码的描述
-
请求的拓扑与当前拓扑匹配。没有更改分配。
此示例假设您有一个包含三个服务器的集群,以及一个拓扑为两个主服务器和一个从服务器的数据库 foo
。
- 命令
-
ALTER DATABASE foo SET TOPOLOGY 2 PRIMARIES 1 SECONDARY
- 返回的 GQLSTATUS 代码
-
00N84
- 返回的状态描述
-
注意:成功完成 - 请求的拓扑与当前拓扑匹配。
ALTER DATABASE
无效。请求的拓扑与当前拓扑匹配。没有更改分配。
SCHEMA
类别
模式通知提供与索引和约束相关的其他信息。
索引或约束已存在
Neo4j 代码 |
|
标题 |
|
描述 |
|
描述 |
|
类别 |
|
GQLSTATUS 代码 |
|
状态描述 |
注意:成功完成 - 索引或约束已存在。 |
SeverityLevel |
|
*<command>
和 cmd
可以是用户提供的完整命令或提供的命令的子集。
给定一个在 (:Label {property})
上名为 existingRangeIndex
的范围索引。
- 命令
-
CREATE INDEX labelProperyRangeIndex IF NOT EXISTS FOR (n:Label) ON (n.property)
- 返回代码的标题
-
CREATE RANGE INDEX labelProperyRangeIndex IF NOT EXISTS FOR (e:Label) ON (e.property)
无效。 - 返回代码的完整描述
-
RANGE INDEX existingRangeIndex FOR (e:Label) ON (e.property)
已存在。
给定一个在 (:Label {property})
上名为 existingRangeIndex
的范围索引。
- 命令
-
CREATE INDEX labelProperyRangeIndex IF NOT EXISTS FOR (n:Label) ON (n.property)
- 返回的 GQLSTATUS 代码
-
00NA0
- 返回的状态描述
-
注意:成功完成 - 索引或约束已存在。
CREATE RANGE INDEX labelProperyRangeIndex IF NOT EXISTS FOR (e:Label) ON (e.property)
无效。RANGE INDEX existingRangeIndex FOR (e:Label) ON (e.property)
已存在。
给定一个在 (:Label {property})
上名为 myIndex
的范围索引。
- 命令
-
CREATE TEXT INDEX myIndex IF NOT EXISTS FOR ()-[r:REL_TYPE]-() ON (r.property)
- 返回代码的标题
-
CREATE TEXT INDEX myIndex IF NOT EXISTS FOR ()-[e:REL_TYPE]-() ON (e.property)
无效。 - 返回代码的完整描述
-
RANGE INDEX myIndex FOR (e:Label) ON (e.property)
已存在。 - 改进建议
-
选择新索引的不同名称并重试。
CREATE TEXT INDEX myIndex2 IF NOT EXISTS FOR ()-[r:REL_TYPE]-() ON (r.property)
给定一个在 (:Label {property})
上名为 myIndex
的范围索引。
- 命令
-
CREATE TEXT INDEX myIndex IF NOT EXISTS FOR ()-[r:REL_TYPE]-() ON (r.property)
- 返回的 GQLSTATUS 代码
-
00NA0
- 返回的状态描述
-
注意:成功完成 - 索引或约束已存在。
CREATE TEXT INDEX myIndex IF NOT EXISTS FOR ()-[e:REL_TYPE]-() ON (e.property)
无效。RANGE INDEX myIndex FOR (e:Label) ON (e.property)
已存在。 - 改进建议
-
选择新索引的不同名称并重试。
CREATE TEXT INDEX myIndex2 IF NOT EXISTS FOR ()-[r:REL_TYPE]-() ON (r.property)
给定一个在 (:Label {property})
上名为 nodeKeyLabelPropertyConstraint
的节点键约束。
- 命令
-
CREATE CONSTRAINT nodeKeyLabelPropertyConstraint IF NOT EXISTS FOR (n:Label) REQUIRE (n.property) IS NODE KEY
- 返回代码的标题
-
CREATE CONSTRAINT nodeKeyLabelPropertyConstraint IF NOT EXISTS FOR (e:Label) REQUIRE (e.property) IS NODE KEY
无效。 - 返回代码的完整描述
-
CONSTRAINT nodeKeyLabelPropertyConstraint FOR (e:Label) REQUIRE (e.property) IS NODE KEY
已存在。
给定一个在 (:Label {property})
上名为 nodeKeyLabelPropertyConstraint
的节点键约束。
- 命令
-
CREATE CONSTRAINT nodeKeyLabelPropertyConstraint IF NOT EXISTS FOR (n:Label) REQUIRE (n.property) IS NODE KEY
- 返回的 GQLSTATUS 代码
-
00NA0
- 返回的状态描述
-
注意:成功完成 - 索引或约束已存在。
CREATE CONSTRAINT nodeKeyLabelPropertyConstraint IF NOT EXISTS FOR (e:Label) REQUIRE (e.property) IS NODE KEY
无效。CONSTRAINT nodeKeyLabelPropertyConstraint FOR (e:Label) REQUIRE (e.property) IS NODE KEY
已存在。
给定一个在 (:Label {property})
上名为 myConstraint
的节点键约束。
- 命令
-
CREATE CONSTRAINT myConstraint IF NOT EXISTS FOR (n:Label2) REQUIRE (n.property2) IS NOT NULL
- 返回代码的标题
-
CREATE CONSTRAINT myConstraint IF NOT EXISTS FOR (e:Label2) REQUIRE (e.property2) IS NOT NULL
无效。 - 返回代码的完整描述
-
CONSTRAINT myConstraint FOR (e:Label) REQUIRE (e.property) IS NODE KEY
已存在。 - 改进建议
-
选择新约束的不同名称并重试。
CREATE CONSTRAINT myConstraint2 IF NOT EXISTS FOR (n:Label2) REQUIRE (n.property2) IS NOT NULL
给定一个在 (:Label {property})
上名为 myConstraint
的节点键约束。
- 命令
-
CREATE CONSTRAINT myConstraint IF NOT EXISTS FOR (n:Label2) REQUIRE (n.property2) IS NOT NULL
- 返回的 GQLSTATUS 代码
-
00NA0
- 返回的状态描述
-
注意:成功完成 - 索引或约束已存在。
CREATE CONSTRAINT myConstraint IF NOT EXISTS FOR (e:Label2) REQUIRE (e.property2) IS NOT NULL
无效。CONSTRAINT myConstraint FOR (e:Label) REQUIRE (e.property) IS NODE KEY
已存在。 - 改进建议
-
选择新约束的不同名称并重试。
CREATE CONSTRAINT myConstraint2 IF NOT EXISTS FOR (n:Label2) REQUIRE (n.property2) IS NOT NULL
索引或约束不存在
Neo4j 代码 |
|
标题 |
|
描述 |
|
类别 |
|
GQLSTATUS 代码 |
|
状态描述 |
注意:成功完成 - 索引或约束不存在。 |
SeverityLevel |
|
- 命令
-
DROP INDEX nonExistingIndex IF EXISTS
- 返回代码的标题
-
DROP INDEX nonExistingIndex IF EXISTS
无效。 - 返回代码的完整描述
-
nonExistingIndex
不存在。 - 改进建议
-
请验证此索引是否为目标索引,以及是否拼写正确。
- 命令
-
DROP INDEX nonExistingIndex IF EXISTS
- 返回的 GQLSTATUS 代码
-
00NA1
- 返回的状态描述
-
注意:成功完成 - 索引或约束不存在。
DROP INDEX nonExistingIndex IF EXISTS
无效。nonExistingIndex
不存在。 - 改进建议
-
请验证此索引是否为目标索引,以及是否拼写正确。
- 命令
-
DROP CONSTRAINT nonExistingConstraint IF EXISTS
- 返回代码的标题
-
DROP CONSTRAINT nonExistingConstraint IF EXISTS
无效。 - 返回代码的完整描述
-
nonExistingConstraint
不存在。 - 改进建议
-
请验证此约束是否为目标约束,以及是否拼写正确。
- 命令
-
DROP CONSTRAINT nonExistingConstraint IF EXISTS
- 返回的 GQLSTATUS 代码
-
00NA1
- 返回的状态描述
-
注意:成功完成 - 索引或约束不存在。
DROP CONSTRAINT nonExistingConstraint IF EXISTS
无效。nonExistingConstraint
不存在。 - 改进建议
-
请验证此约束是否为目标约束,以及是否拼写正确。
GENERIC
通知
GENERIC
通知代码不属于任何更广泛的类别,并且彼此之间没有关联。
子查询变量遮蔽
Neo4j 代码 |
|
标题 |
子查询中的变量正在遮蔽外部作用域中具有相同名称的变量。 |
描述 |
子查询中的变量正在遮蔽外部作用域中具有相同名称的变量。如果您希望使用该变量,则必须使用导入 WITH 子句将其导入子查询。( |
类别 |
|
GQLSTATUS 代码 |
|
状态描述 |
信息:子查询变量遮蔽。子查询中的变量 |
分类 |
|
SeverityLevel |
|
- 查询
-
MATCH (n) CALL { MATCH (n)--(m) RETURN m } RETURN *
- 返回代码的描述
-
子查询中的变量正在遮蔽外部作用域中具有相同名称的变量。如果您希望使用该变量,则必须使用导入
WITH
子句将其导入子查询。(遮蔽变量为:n
) - 改进建议
-
如果查询的预期行为是子查询中的变量是一个新变量,那么不需要做任何操作。如果预期行为是使用外部查询中的变量,则需要使用
WITH
子句将其导入子查询。MATCH (n) CALL { WITH n MATCH (n)--(m) RETURN m } RETURN *
- 查询
-
MATCH (n) CALL { MATCH (n)--(m) RETURN m } RETURN *
- 返回的 GQLSTATUS 代码
-
03N60
- 返回的状态描述
-
info: 子查询变量遮蔽。子查询中的变量
n
与外部查询中的变量同名。除非您想将其作为新变量,否则请在子查询中使用WITH n
导入外部作用域中的变量。 - 改进建议
-
如果查询的预期行为是子查询中的变量是一个新变量,那么不需要做任何操作。如果预期行为是使用外部查询中的变量,则需要使用
WITH
子句将其导入子查询。MATCH (n) CALL { WITH n MATCH (n)--(m) RETURN m } RETURN *
冗余的可选过程
Neo4j 代码 |
|
标题 |
当过程调用 void 过程时,使用 |
描述 |
使用 |
类别 |
|
GQLSTATUS 代码 |
|
状态描述 |
info: 冗余的可选过程。使用 |
分类 |
|
SeverityLevel |
|
OPTIONAL
- 查询
-
OPTIONAL CALL db.createLabel("A")
- 返回代码的描述
-
使用
OPTIONAL
是冗余的,因为CALL db.createLabel
是一个 void 过程。 - 改进建议
-
如果查询的预期行为是使用 void 过程,则可以删除
OPTIONAL
关键字而不会影响查询。CALL db.createLabel("A")
- 查询
-
OPTIONAL CALL db.createLabel("A")
- 返回的 GQLSTATUS 代码
-
03N61
- 返回的状态描述
-
info: 冗余的可选过程。使用
OPTIONAL
是冗余的,因为CALL db.createLabel
是一个 void 过程。 - 改进建议
-
如果查询的预期行为是使用 void 过程,则可以删除
OPTIONAL
关键字而不会影响查询。CALL db.createLabel("A")
冗余的可选子查询
Neo4j 代码 |
|
标题 |
当 |
描述 |
使用 |
类别 |
|
GQLSTATUS 代码 |
|
状态描述 |
info: 冗余的可选子查询。使用 |
分类 |
|
SeverityLevel |
|
CALL
子查询中冗余使用OPTIONAL
- 查询
-
UNWIND [1, 2, 3] AS x OPTIONAL CALL (x) { CREATE({i:x}) }
- 返回代码的描述
-
对于单元子查询,可选是冗余的。在单元子查询上使用
OPTIONAL
没有任何影响,可以删除。 - 改进建议
-
如果查询的预期行为是子查询不返回任何值,则可以删除
OPTIONAL
关键字而不会影响查询。UNWIND [1, 2, 3] AS x CALL (x) { CREATE({i:x}) }
- 查询
-
UNWIND [1, 2, 3] AS x OPTIONAL CALL (x) { CREATE({i:x}) }
- 返回的 GQLSTATUS 代码
-
03N62
- 返回代码的描述
-
info: 冗余的可选子查询。使用
OPTIONAL
是冗余的,因为CALL
是单元子查询。 - 改进建议
-
如果查询的预期行为是子查询不返回任何值,则可以删除
OPTIONAL
关键字而不会影响查询。UNWIND [1, 2, 3] AS x CALL (x) { CREATE({i:x}) }
缺少参数
Neo4j 代码 |
|
标题 |
语句引用了请求中未提供的参数。 |
描述 |
未向查询提供足够的参数。生成的查询计划不会被缓存,并且在没有 EXPLAIN 的情况下无法执行。( |
类别 |
|
GQLSTATUS 代码 |
|
状态描述 |
warn: 缺少参数。由于未定义的参数 |
分类 |
|
SeverityLevel |
|
EXPLAIN
查询- 查询
-
EXPLAIN WITH $param as param RETURN param
- 返回代码的描述
-
未向查询提供足够的参数。生成的查询计划不会被缓存,并且在没有
EXPLAIN
的情况下无法执行。(缺少参数:param
) - 改进建议
-
提供参数才能缓存计划。
- 查询
-
EXPLAIN WITH $param as param RETURN param
- 返回的 GQLSTATUS 代码
-
01N60
- 返回的状态描述
-
warn: 缺少参数。由于未定义的参数
{ $param }
,查询计划无法缓存,并且在没有EXPLAIN
的情况下无法执行。请提供参数。 - 改进建议
-
提供参数才能缓存计划。
过程或函数执行警告
Neo4j 代码 |
|
标题 |
查询使用了生成警告的过程。 |
描述 |
查询使用了生成警告的过程。( |
类别 |
|
GQLSTATUS 代码 |
|
状态描述 |
warn: 过程执行警告。过程 |
分类 |
|
SeverityLevel |
|
无法满足的关系类型表达式
当匹配无法满足的关系类型表达式时,例如请求零个、多个或矛盾的类型。
Neo4j 代码 |
|
标题 |
查询包含一个无法满足的关系类型表达式。 |
描述 |
关系类型表达式不可能满足。( |
类别 |
|
GQLSTATUS 代码 |
|
状态描述 |
warn: 无法满足的关系类型表达式。表达式 |
分类 |
|
SeverityLevel |
|
- 查询
-
MATCH ()-[r:R1&R2]->() RETURN r
- 返回代码的描述
-
关系类型表达式不可能满足。(
R1&R2
永远不会被任何关系满足。关系必须恰好具有一个类型。)
- 查询
-
MATCH ()-[r:R1&R2]->() RETURN r
- 返回的 GQLSTATUS 代码
-
01N61
- 返回的状态描述
-
warn: 无法满足的关系类型表达式。表达式
R1&R2
无法满足,因为关系必须恰好具有一个类型。
重复的关系引用
Neo4j 代码 |
|
标题 |
查询不返回任何结果,因为关系变量被绑定了多次。 |
描述 |
|
类别 |
|
GQLSTATUS 代码 |
|
状态描述 |
warn: 重复的关系引用。 |
分类 |
|
SeverityLevel |
|
- 查询
-
MATCH (:A)-[r]->(), ()-[r]->(:B) RETURN r
- 返回代码的描述
-
查询中多次引用了关系,这导致没有结果,因为关系在每个结果中不能出现多次。(关系
r
重复了) - 改进建议
-
使用一个模式匹配所有以标签
A
的节点开始并以标签B
的节点结束的关系。MATCH (:A)-[r]->(:B) RETURN r
- 查询
-
MATCH (:A)-[r]->(), ()-[r]->(:B) RETURN r
- 返回的 GQLSTATUS 代码
-
01N63
- 返回的状态描述
-
warn: 重复的关系引用。
r
在(:A)-[r]→(), ()-[r]→(:B)
中重复,这导致没有结果。 - 改进建议
-
使用一个模式匹配所有以标签
A
的节点开始并以标签B
的节点结束的关系。MATCH (:A)-[r]->(:B) RETURN r
- 查询
-
MATCH ()-[r*]->()<-[r*]-() RETURN count(*) AS count
- 返回代码的描述
-
变量长度关系变量被绑定了多次,这导致没有结果,因为关系在每个结果中不能出现多次。(关系 r 重复了)
- 查询
-
MATCH ()-[r*]->()<-[r*]-() RETURN count(*) AS count
- 返回的 GQLSTATUS 代码
-
01N63
- 返回的状态描述
-
warn: 重复的关系引用。
r
在()-[r*]→()←[r*]-()
中重复,这导致没有结果。