将 SQLite3 转储导入数据库
Posted
技术标签:
【中文标题】将 SQLite3 转储导入数据库【英文标题】:Importing a SQLite3 dump back into the database 【发布时间】:2010-09-23 15:00:32 【问题描述】:我觉得这是一个愚蠢的问题,因为它似乎是常识。 . .但是我可以放在一起的谷歌搜索似乎无法给我答案!
我知道如何使用 .dump 命令从 sqlite3 数据库中获取数据。但是现在我有了这个名为 export.sqlite3.sql 的 ASCII 文件。 . .我似乎无法将它恢复到我想要的数据库中。
我的目标是将我在一个 rails 应用程序中的数据传输到另一个应用程序,这样我就不必再花各种时间创建虚拟数据了。 . .所以我从我的第一个应用程序中转储了数据,摆脱了所有 CREATE TABLE 语句,并确保我的第二个应用程序上的模式匹配。 . .现在我只需要把它放进去。
有人愿意帮助我吗?当你找到方法时,你能告诉我你在谷歌上插入了什么,因为我现在正用勺子敲打我的头,因为我认为这很容易找到。
【问题讨论】:
【参考方案1】:cat dumpfile.sql | sqlite3 my_database.sqlite
This is modified from the sqlite3 getting started guide.
【讨论】:
优秀的答案。冒着听起来像破唱片的风险,这是对 cat 的无用使用。重定向就是答案: sqlite3 my_database.sqlite 我同意,我通常也用 我建议在前面加上“PRAGMA journal_mode = OFF; PRAGMA synchronous = OFF;”在运行此之前转储文件。这使得恢复速度更快。显然,在实际使用恢复的数据库时,这些设置不应关闭。 60 MB,220'000 行,在 10 秒内,前置“PRAGMA journal_mode = OFF; PRAGMA synchronous = OFF;”谢谢@Brian【参考方案2】:你没有指定你的操作系统,而
sqlite3 my_database.sqlite < export.sqlite3.sql
适用于 unix 风格,不适用于 windows。
.dump 命令的反面是 .read 命令。语法是
sqlite3> .read export.sqlite3.sql
【讨论】:
unix flavor 命令不起作用.. 你用这个恢复了吗? 是的,但要注意 sqlite3> 不是 unix 命令,它是 sqlite3 提示符 我得到了没有导出声明的解决方案,它恢复了..谢谢echo .dump | sqlite3 sourcedb.sqlite | sqlite3 targetdb.sqlite
似乎适用于 Windows...
为什么需要导入数据库的转储?我不能只使用 database.db 文件开头吗?【参考方案3】:
这也应该有效:
echo '.read export.sqlite3.sql' | sqlite3 my_database.sqlite3
与“sqlite3 my_database.sqlite3 < export.sqlite3.sql
”相比,一个可能的优势是 SQLite 的 .read
命令可能(现在或将来)比“读取所有文本并执行它”更先进。它可能会进行批处理,这将减少大型转储的内存使用量。不过,我承认这是一个非常模糊且不太可能的优势。 .read
很可能只是从输入中读取每一行并执行它,就像重定向和管道运算符一样。
【讨论】:
错误:无法使用此命令打开“export./home/ubuntu/trydatabase/newsql.sql”【参考方案4】:将此用于 unix 风格。
按 Ctrl+alt+T 并写入
sqlite3 /home/ubuntu/output.sqlite < /home/ubuntu/input.sql
它从输入文件中恢复您的数据库。
【讨论】:
'Ctrl+alt+T' 对所有 Unix 风格有什么作用? 打开终端。以上是关于将 SQLite3 转储导入数据库的主要内容,如果未能解决你的问题,请参考以下文章
如何将加载 .sql 或 .csv 文件导入 SQLite?