2017-12-25 31 views
1

私はsqlite3データベースで作業していましたが、大量のデータ(テーブル全体(DROP))を削除した後、ファイルサイズは変更されませんでした(テーブルは5MBでした)。私が尋ねているデータベースではありませんが、おそらくこれは私の質問に関係しています。sqliteデータベースからすべてのデータを取り出すには?

特定のメッセージに対してgrep -aを使用して探しているデータベースがたくさんある場合、問題のデータベースが50MBのサイズで正常に見つかりました。ただし、データベースをsqlite3データベースビューア(またはsqlite3コマンドラインツール)で開くと、messagesテーブルに800を超えるエントリしか表示されません。現在の自動インクリメントインデックスは18.000を超えています。これは、テーブルのエントリ数です。 grepで.dbファイルを調べると、私が望むものはすべてそこにあるように見えますが、何とか "隠されています"(?)と推測しています。

どのようにsqliteデータベースからすべてのデータを取得できますか? .dump <table>には、私が探しているメッセージも含まれていないことに注意してください。これについての簡単な説明と、実際にデータが削除されない理由/ファイルサイズが5MBのテーブルを削除したときに縮小しない理由については、私も感謝しています。

sqlite> .dbinfo 
database page size: 4096 
write format:  1 
read format:   1 
reserved bytes:  0 
file change counter: 366 
database page count: 11405 
freelist page count: 10372 
schema cookie:  2 
schema format:  4 
default cache size: 0 
autovacuum top root: 0 
incremental vacuum: 0 
text encoding:  1 (utf8) 
user version:  7 
application id:  0 
software version: 3008005 
number of tables: 3 
number of indexes: 1 
number of triggers: 0 
number of views:  0 
schema size:   737 

(私はこのデータベースを作成したり、これまで編集していなかった、それはInstagramののダイレクトメッセージデータベースだということに注意してください。)

+0

間違った質問をしているようです。あなたが削除したデータを検索することはできず、削除されたメッセージを検索することは意味がありません。たぶんあなたは[まずはsqliteデータベースを掃除する方法?](https://stackoverflow.com/q/18126997/608639)を試してください。 – jww

+0

私がやってみたいのは、真空の反対です。受け入れられた答えに対する私の最後のコメントをチェックして、私のニーズに合ったものを見てください。私は自分自身のデータを削除していない、instagramはすぐにキャッシュから非常に迅速にメッセージを削除するようです。バキュームは間違いなく興味があったものですが、リンクに感謝します! – confetti

答えて

0

を削除したデータをすぐにデータベースファイルから削除されません。 change sqlite file size after "DELETE FROM table"を参照してください。

フリーリストのページ数で示されているように、そのファイルはほとんど空で、VACUUMを実行すると、検索対象のデータの残りが捨てられる可能性があります。

削除されたデータを簡単に復元する方法はありません(重要な管理情報がないため)。少量のデータだけに興味がある場合は、16進エディタを試してみてください。

+0

あなたの答えと大きな説明をありがとうございました。私はちょっと "空のスペース"に混乱していますが、削除されたデータが "なくなった"ことを意味してはいけません(少なくとも、 'cat'や' grep -a'で直接見ることはできません)?私にはこれはインデックス作成/メタデータ/参照の一部を削除しているように見えますが、それを再作成するか、少なくとも簡単な方法でデータを復元することはできません(実際に復元する必要はありませんデータベースの削除前の状態) – confetti

+0

"空"は、データベースが実際にデータを使用していないことを意味します。また、データを検索して解釈するためには、削除されたすべてのメタデータが必要です。 –

+0

ありがとう、それは私の質問に答えた。私のinstagramメッセージのデータベースを取得しようとすることで私の問題を解決するために、毎分データベースをダンプするスクリプトを作成します(私は、(たぶん)instagramがキャッシュデータベースをクリアする方法を知らないので)その後、ダンプをマージして重複を削除します。 – confetti

関連する問題