neo4j 2.0以降では、これを行うneo4jシェルにdump commandがあります。特定のクエリまたはデータベース全体の結果をダンプできます。 neo4j-shellを起動するときに引数としてdumpコマンドを渡すことで、出力をファイルにリダイレクトして 'cypher create script'を作成するか、別のデータベースのグラフのすべてまたは一部を再作成する別のneo4j-shellセッションにすることができます。
フラット化し、クエリの結果をダンプ
neo4j-sh$ dump MATCH (n:StackOverflow:Question {questionId:18830686})<-[:ANSWERS]-(answer)<-[:WRITES]-(user) RETURN *;
ファイルにデータベース全体をダンプ
[email protected]: bin/neo4j-sh -c dump > ./backup/$(date +"%y%m%d_%H%M%S").cypher
パイプ別のシェルセッションにダンプ&データベース
[email protected]: db1/bin/neo4j-sh -path db1/data/graph.db/ -c dump | db2/bin/neo4j-shell -path db2/data/graph.db/
警告買い手
あり、いくつかの問題は、ダブルスと一緒にいたとのNeo4j-シェルはインポート(SO、github)で再び解釈できなかった、科学的表記法で輸出されて浮遊し"quoted strings"
(github)をエスケープしていくつかの問題がありました。これらは両方とも解決されていると思いますので、問題がある場合は、最近のビルドをチェックしてみてください。
最後に、まだ解決されていないと思う1つの問題があります。最近ではスキーマがダンプに含まれていたので、create index
とcreate constraint
もエクスポートされています。しかし、エクスポートされたすべてのステートメントは、出力内で同じトランザクションで囲まれており、neo4jは同じトランザクション内でスキーマとデータを作成することはできません。別のシェルセッションに直接ダンプは、グラフを再作成するためにあなたのパイプであれば、あなたは
> ;
ConstraintViolationException: Cannot perform data updates in a transaction that has performed schema updates.
neo4j-sh (?)$ commit
Failed to commit, transaction rolled back
に遭遇する可能性が高いですこれは、ファイルにリダイレクトして、手動で最後の後commit
とbegin
を追加することによってこの問題を回避するのは簡単ですスキーマ文新しい行にそれらをそれぞれを置くようにしてください、それが何か
...
create index on :`Person`(`name`)
commit
begin
create (_0:`Person` {`name`:"Paul"})
...
のようになりますそれとも、プログラムでダンプとドン場合は、」その場でのNeo4j-シェルからの出力を編集して、例えば、そこにそれを追加することができます手動で編集する必要はありません。 OSXで私はそう
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/
のようにsedを使用していた。この追加コミット(一緒にすべてのスキーマ文をコミットできる)必要ですが、ちょっと、それはどのような作品よりも、各スキーマ文の後に。
「usr @ term:bin/neo4j-sh -c dump> ./backup/$(date+ "%y%あなたの答えから「cypher」を選択してください。私はWindows 7を使用しています。ありがとう –
Neo4jインストールディレクトリから。 Windowsの場合は、上記のコマンドを 'Neo4jShell.bat -c dump> ...'に変更します( "usr @ term:"はコピーしないでください)。 –
ドッカー画像を使ってこれを達成する方法はありますか?あなたは次のコマンドを使用してデータベースフォルダを持っている場合 – yucer