从Neo4j中删除所有节点时出现ConstraintViolationTransactionFailureException

时间:2016-09-22 16:50:52

标签: neo4j cypher

当我尝试从我的Neo4j图形数据库中删除所有节点时,我已经在较小的数据集上成功完成了多次,我在运行此查询后始终遇到Error: undefined - undefined

MATCH (n) DETACH DELETE n

我认为我一次尝试删除的节点数量可能太大(> 100000),所以我尝试了这个查询

MATCH (n) OPTIONAL MATCH (n)-[r]-() WITH n,r LIMIT 10000 DELETE n,r

以及它的许多变体,主要代表我在这篇文章中读到的内容:Best way to delete all nodes and relationships in Cypher。全部都返回了此错误

org.neo4j.kernel.api.exceptions.ConstraintViolationTransactionFailureException: Cannot delete node<32769>, because it still has relationships. To delete this node, you must first delete its relationships.

并且每次,节点Neo4j都无法删除不同。有没有办法解决这个问题?

也许值得注意的是,当我运行此查询时,拼命运行上一个查询的变体

MATCH ()-[r]-() OPTIONAL MATCH (n)-[r]-() WITH r,n LIMIT 10000 DELETE r,n

我得到了这个相当独特的错误

Java heap space

控制台中的

,在横幅中显示为Neo.DatabaseError.General.UnknownError

1 个答案:

答案 0 :(得分:1)

编写查询的方式之一是每个DELETE一次只尝试删除单个节点/关系对。如果任何节点具有多个关系,您将获得该约束违规错误,因为为了删除节点,您必须删除其所有关系(事先或同时)。

要删除10000个节点(及其所有关系),请使用以下查询:

MATCH (n)
WITH n LIMIT 10000
DETACH DELETE n;