這幾天遇到某個站台使用 SQLite 的時候在某一張 table 出現『database disk image is malformed』的問題導致整張 table 無法讀取
對於這種狀況通常是 table page 損壞了,但這一篇的狀況比較特殊
先將 database 匯出
$ sqlite3 db.sqlite sqlite>.output db.sql sqlite>.dump sqlite>.quit
將 db.sql 匯入新建的 sqlite 進行測試
$ sqlite new.sqlite sqlite>.read db.sql sqlite>.quit
在此篇案例,.read 匯入 sql 檔的時候出現 insert 錯誤訊息,原來開發者在匯入資料的時候誤將 table1 的資料 insert 到 table2 的資料,格式完全不對並且 key 錯誤,所以導致 table 損壞
但這代表 SQLite 本身並沒有這樣的防護機制,所以導致 insert 錯誤的資料後 table 就壞了,如果無法避免人為的疏失,那還是少用 SQLite 的好!
參考資料: