ちょっと無茶なSQL文でアップデートをしようとして、ちっとも処理が終わらないので、強制終了したら見事にデータベースファイルが破損してしまった。
sqlite> drop table exome; Error: database disk image is malformed
とすげなくエラーメッセージがでて言うことを聞かない。
https://qiita.com/tsunet111/items/2c21706fd67f5ecb047d
こちらを参考にSQLiteのサイトからツールをダウンロードしてきて回復を試みることにした。
結果はアウト...
仕方がない。バックアップから作り直すか・・・トホホ。
ちなみに無茶なSQLは
3カラムの組み合わせが一致し、かつ1カラムの内容が2つの条件を満たし、もう1つのカラムでの条件もクリアするレコードを探して、あるカラムにフラグを立てる
というもの。
この3つのカラムの組み合わせパターンが5700通り位ある。
最初、SQLAlchemyから一気に処理を試みるも、流石にメモリスワップが大量に発生するのか全然進んでる気配がない。
そこで100件ごとにconnection.commit()を入れて一旦書き込んで次に進むというスクリプトを用意して順に書き換えていくことにした。そうすると100件処理するのに7分半位かかっている。1件あたり4.5秒というところ。レコード総数が160万行あるし、こりゃ持久戦だな。