2008-11-22 63 views
29

我觉得这是一个愚蠢的问题,因为它看起来像常识。 。 。但没有谷歌搜索,我可以放在一起似乎能够给我答案!导入SQLite3转储回数据库

我知道如何使用.dump命令获取sqlite3数据库的数据OUT。但是现在我有了这个名为export.sqlite3.sql的ASCII文件。 。 。我似乎无法将其恢复到我想要的数据库中。

我的目标是将我在一个rails应用程序中的数据传输到另一个应用程序,因此我不必再花费各种时间创建虚拟数据。 。 。所以我从我的第一个应用程序中甩掉了数据,摆脱了所有CREATE TABLE语句,并确保我的第二个应用程序上的模式匹配。 。 。现在我只需要把它放在那里。

有人会介意帮助我吗?当你找到办法的时候,你会告诉我你插入谷歌的是什么,因为我现在正在用我的头部用勺子打我的脑袋,而不是我认为容易找到的东西。

回答

49
cat dumpfile.sql | sqlite3 my_database.sqlite 

This is modified from the sqlite3 getting started guide.

+17

优秀的答案。 冒着听起来像破碎的记录的风险,这是猫的无用的使用。重定向就是答案: sqlite3的my_database.sqlite converter42 2008-11-23 17:57:20

+0

我同意,我通常也在 2008-11-23 19:12:37

+0

我建议预先加入“PRAGMA journal_mode = OFF; PRAGMA synchronous = OFF;”运行此之前转储文件。这使得恢复速度更快。显然,在实际使用恢复的数据库时,这些设置不应该为OFF。 – Brian 2014-02-26 14:45:01

37

您没有指定您的操作系统,并同时

sqlite3 my_database.sqlite < export.sqlite3.sql 

将为UNIX系统的工作,它不会对窗口工作。

.dump命令的反转是.read命令。语法是

sqlite3> .read export.sqlite3.sql 
2

这也应该工作:

echo '.read export.sqlite3.sql' | sqlite3 my_database.sqlite3 

一个好处可能超过“sqlite3 my_database.sqlite3 < export.sqlite3.sql”是的SQLite的.read命令可能(现在或将来)更先进的不仅仅是“阅读在所有文本中执行它。“它可能会执行批处理,这将减少大型转储的内存使用量。但我承认,这是一个相当模糊和不太可能的优势。很有可能,.read只是从输入中读取每一行并执行它,就像重定向和管道操作一样。

0

将此用于unix口味。

按Ctrl + Alt + T和写

sqlite3 /home/ubuntu/output.sqlite < /home/ubuntu/input.sql 

它从输入文件恢复数据库。