2016-09-22 24 views
3

刪除所有節點時,當試圖從我的Neo4j圖形數據庫,我已經成功地做過很多次,在過去的較小的數據集刪除所有節點,我一直跨越Error: undefined - undefined跑運行此查詢ConstraintViolationTransactionFailureException從Neo4j的

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

查詢寫入方式的問題之一是每個DELETE只嘗試一次刪除單個節點/關係對。如果任何節點有多個關係,那麼您將得到該約束違規錯誤,因爲爲了刪除一個節點,您必須刪除它的所有關係(預先或同時)。

刪除10000個節點(及其所有的關係),使用此查詢:

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

是的,你說對了。當我在DELETE前面拋出一個DETACH時,我的第二個查詢完美工作,並且我能夠以50000爲增量刪除節點。 – kendama