[踩雷文]SQLite Studio真的很雷

朋友請我幫忙一個奇怪的問題,就是要把LINE的SQLite的DB檔取出所有的對話然後備份到新手機的SQLite DB裡,本來想說這應該滿簡單的匯出資料塞回去新DB就好,Google了一下發現比較多比例的人都推SQLite Studio,於是我也選了這套軟體
噩夢就開始了......

我第一個想到的方法就是先匯出SQL語法,於是找到要匯出的Table後選擇匯出成.sql檔,等等再選擇新DB貼上SQL語法執行就收工,正當我天真的這麼想時....

在我試過所有匯出的檔案類型都發現不行時,我在思考是不是這Table太多資料所以才這樣,於是我嘗試匯出別的資料量小的Table,果然很順利,於是證明了Table量太大匯出會當機。

那我想試試下指令的方式,直接Insert New Line DB就好了,正當我寫完一大串SQL後滿懷期待的看到它成功時....

好吧...雖然沒整個Crash,但出奇怪的Error,Google後發現有可能是SQLite Studio沒辦法一次塞太大量的資料,那分批寫入就好了,但SQLite支援的語法沒有SQLServer的BULK語法,不過有Limit跟Offset這兩種語法,那應該有救了,不過SQLite Studio的雷我已經踩了2次了,這次我決定先從1000筆開始試就好,結果成功了!
接著再改成Limit 2000 Offset 1000,也成功了!
接著再改成Limit 3000 Offset 3000,也成功了!
接著再改成Limit 4000 Offset 6000,也成功了!
太棒了捷克!我成功備份了1萬筆訊息了!!!搞不好他能承受的量比我想得多,而且總共有10萬多筆訊息要轉移,一次幾千太慢了....
那我抱著期待的心情接著改成Limit 10000 Offset 10000,也成功了!
接著再改成Limit 20000 Offset 20000,也成功了!
接著再改成Limit 40000 Offset 40000,也成功了!
太棒了!!!4萬筆一次塞都沒問題,剩下2萬7千筆資料一定沒問題,再做一次就收工了....
接著再改成Limit 27000 Offset 80000.....

又Error了.....
看來Offset應該也會讀取資料然後占用快取,當我要Offset8萬筆資料時就又出問題了
於是我把舊DB的前8萬筆資料全刪除,又很順利的成功Insert了
所以....
今天這個問題浪費了一個下午,想想要是直接寫一個WinForm工具用C#分批取出塞入好像更快,所以結論就是.....
SQLite Studio真的爛透了!!!

留言