2008-11-22 65 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 

它從輸入文件恢復數據庫。