gpt4 book ai didi

neo4j - 以 Cypher 格式(ASCII 文本)导出整个数据库?

转载 作者:行者123 更新时间:2023-12-03 10:56:46 29 4
gpt4 key购买 nike

有没有办法在 Cypher 中导出整个 Neo4J 数据库,从而生成 Cypher 命令的 ASCII 文件,该文件可用于空的 Neo4J 数据库以重新创建原始数据库?由于 Neo4J 正在经历如此快速的发展,我担心使用内置备份功能(企业版)。

例如,使用 Oracle,您可以使用 SQL*PLUS DML/DDL 命令导出整个数据库,这很有用。

最佳答案

从 Neo4j 2.0 开始,有一个 dump command在执行此操作的 neo4j-shell 中。您可以转储特定查询或整个数据库的结果。通过在启动 neo4j-shell 时将 dump 命令作为参数传递,您可以将输出重定向到文件以制作“密码创建脚本”或另一个 neo4j-shell session ,在不同的数据库中重新创建图形的全部或部分。

展平并转储查询结果

neo4j-sh$ dump MATCH (n:StackOverflow:Question {questionId:18830686})<-[:ANSWERS]-(answer)<-[:WRITES]-(user) RETURN *;

将整个数据库转储到一个文件
usr@term: bin/neo4j-sh -c dump > ./backup/$(date +"%y%m%d_%H%M%S").cypher

将转储通过管道传输到另一个 shell session 和数据库
usr@term: db1/bin/neo4j-sh -path db1/data/graph.db/ -c dump | db2/bin/neo4j-shell -path db2/data/graph.db/

警告清空者

以科学记数法导出 double 数和浮点数时存在一些问题,neo4j-shell 无法在导入时再次解释这些问题( SOgithub )并且转义 "quoted strings" 存在一些问题( github )。我认为这些都已解决,因此如果您遇到问题,您可能需要查看最近的版本。

最后还有一个我认为还没有解决的问题。最近模式被包含在转储中,所以 create indexcreate constraint语句也被导出。但是,所有导出的语句都在一个框架中,并且输出中的同一个事务,neo4j 不允许您在同一个事务中创建模式和数据。因此,如果您将转储直接通过管道传输到另一个 shell session 以重新创建图形,您可能会遇到
> ;
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-shell 的输出并将其添加到那里,例如,如果您以编程方式转储并且不想手动编辑。在 osx 上,我像这样使用了 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/

这会在每个模式语句之后添加一个提交,这超出了必要的范围(可以将所有模式语句一起提交),但是,嘿,它有效。

关于neo4j - 以 Cypher 格式(ASCII 文本)导出整个数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18830686/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com