Ab Neo4j 2.0 gibt es eine dump command in neo4j-Shell, die dies tut. Sie können die Ergebnisse einer bestimmten Abfrage oder der gesamten Datenbank ausgeben. Durch das Übergeben des Dump-Befehls als Argument beim Starten von neo4j-shell können Sie die Ausgabe in eine Datei umleiten, um ein "cypher create script" oder eine andere neo4j-Shell-Sitzung zu erstellen, die alle oder Teile des Graphen in einer anderen Datenbank neu erstellt.
Flatten und Dump die Ergebnisse einer Abfrage
neo4j-sh$ dump MATCH (n:StackOverflow:Question {questionId:18830686})<-[:ANSWERS]-(answer)<-[:WRITES]-(user) RETURN *;
gesamte Datenbank zu einer
Datei Dump
[email protected]: bin/neo4j-sh -c dump > ./backup/$(date +"%y%m%d_%H%M%S").cypher
Rohr die Dump in einem anderen Shell-Sitzung & Datenbank
[email protected]: db1/bin/neo4j-sh -path db1/data/graph.db/ -c dump | db2/bin/neo4j-shell -path db2/data/graph.db/
Caveat emptor
Es gab einige Probleme mit Doppel- und Schwimmer in der wissenschaftlichen Schreibweise exportiert, die Neo4j-Shell nicht wieder auf Import interpretieren könnte (SO, github) und es gab einige Probleme mit "quoted strings"
Flucht (github) . Ich denke, dass beide gelöst sind. Wenn Sie Probleme haben, sollten Sie sich vielleicht einen kürzlichen Build ansehen.
Und schließlich gibt es ein Problem, von dem ich glaube, dass es noch nicht gelöst ist. Kürzlich wurde das Schema in den Speicherauszug aufgenommen, so dass create index
und create constraint
Anweisungen ebenfalls exportiert werden. Alle exportierten Anweisungen werden jedoch in ein und derselben Transaktion in der Ausgabe eingerahmt und neo4j lässt Sie kein Schema und Daten in derselben Transaktion erstellen. Also, wenn Sie Rohr direkt die Dump in einer anderen Shell-Sitzung um die Grafik zu erstellen, sind Sie wahrscheinlich in
> ;
ConstraintViolationException: Cannot perform data updates in a transaction that has performed schema updates.
neo4j-sh (?)$ commit
Failed to commit, transaction rolled back
läuft Es ist einfach, dies zu umgehen, indem in eine Datei umleiten und die manuellen Hinzufügen commit
und begin
nach dem letzten Schemaanweisung. Seien Sie sicher, dass sie sich auf eine neue Zeile zu setzen, sollte es so etwas wie
...
create index on :`Person`(`name`)
commit
begin
create (_0:`Person` {`name`:"Paul"})
...
suchen Sie können auch die Ausgabe von Neo4j-Shell on the fly bearbeiten und dort hinzufügen, zum Beispiel, wenn Sie programmatisch und don Dump‘ Ich möchte manuell bearbeiten. Auf osx haben benutzte ich wie so sed
db1/bin/neo4j-shell -path db1/data/graph.db/ -c dump | sed -E 's/create (index|constraint) on .*/&\'$'\ncommit''\'$'\nbegin/' | db2/bin/neo4j-shell -path db2/data/graph.db/
ein nach jedem Schema Erklärung verpflichten Dies fügt, die mehr als das, was notwendig ist, (könnten alle Schema Aussagen zusammen begehen), aber hey, es funktioniert.
./neo4j-shell -c dump > export_data.cypher
-c
Optionen erzählt die Neo4j-Shell, die wir Leiten eines Neo4j Shell-Befehl, und dass wir die Ausgabe auf stdout (außerhalb der NEO4-Schale) in der Bash wollen:
Wo soll ich diesen Befehl 'usr @ term: bin/neo4j-sh -c dump> einfügen? ./backup/$(date +"% y% m% d_% H% M% S "). cypher" aus Ihrer Antwort? Ich benutze Windows 7. Danke –
Von Neo4j Installationsverzeichnis. Wenn Sie sich in Windows befinden, ändern Sie den obigen Befehl in 'Neo4jShell.bat -c dump> ...' (kopieren Sie nicht "usr @ term:"). –
Gibt es eine Möglichkeit, dies mit dem Docker-Image zu erreichen? – yucer