過去ログ表示


過去ログ 303 を表示

トピック内全 10 記事中の 1 〜 10 番目を表示
[ 最新記事及び返信フォームをトピックトップへ ]
このトピックの全ページ / [0]

places.sqlite内の削除方法がわからないデータ
(#46877) このトピック中1番目の投稿
(環境: Linux/Other)

places.sqlite内に削除する方法がわからないデータがあります。
一つはロケーションバーの入力履歴?(moz_inputhistory)、もう一つはブックマークのキーワード(moz_keywords)です。
もしplaces.sqliteの再作成以外に削除する方法があれば教えてください。
http://firefoxhacks.at.webry.info/200902/article_1.html

moz_keywordsは過去のデータまで蓄積しているみたいなのですが、これは仕様でしょうか?
キーワードを設定→キーワードを削除して違うキーワードを設定……を繰り返すと、moz_keywords内にデータがどんどん溜っていきます。

Re[1]: places.sqlite内の削除方法がわからないデータ
(#46878) このトピック中2番目の投稿
(環境: WinXP SP3/SeaMonkey1.1)

> もしplaces.sqliteの再作成以外に削除する方法があれば教えてください。
> http://firefoxhacks.at.webry.info/200902/article_1.html

単なるSQLiteのデータベースなので、"SQLite Manager"というアドオンを入れ、そのUIからあるテーブルのあるキーのものを削除、という方法は存在します。
> https://addons.mozilla.org/en-US/firefox/addon/5817
"SQLite Manager"は、追加とか削除の時に、使われるSQLステートメントを表示してくれるのでありがたい。
10数個のほぼ独立していそうな、「複数のキーフィールド+複数のデータフィールド」の"Table"だけで、"View"はなさそうなので、
思いっきり正規化してあってJOINを使い倒す、というようなDB構成では無いように見えます。

今動いているFirefoxのplaces.sqliteにはロックがかかっていて、"SQLite Manager"からはアクセスできないので、以下のようになるかな?
(1) 複数のプロファイルを作り、現行プロファイルのplaces.sqliteを.../適当なディレクトリー/new-places.sqliteとかにコピー、
(2) 二番目のプロファイルでFirefoxを起動し、.../new-places.sqlite をいじり倒す、
(3) 三番目のプロファイルのplaces.sqliteを変更したもので置き換えて確認、
(4) OKならば現行のプロファイルのplaces.sqliteを置き換えて確認。

journalファイルなどは消さないといけないとか、ファイルのタイムスタンプが変わるので何か起こるとか、
手作業なので、テーブル内の複数の行の間の関連をきちんと維持して削除するのはほぼ不可能、
とかいろいろありますから、注意深く作業する必要がありますけど。

Re[2]: places.sqlite内の削除方法がわからないデータ
(#46883) このトピック中3番目の投稿
(環境: Linux/Other)

> 単なるSQLiteのデータベースなので、"SQLite Manager"というアドオンを入れ、そのUIからあるテーブルのあるキーのものを削除、という方法は存在します。
>>https://addons.mozilla.org/en-US/firefox/addon/5817
> "SQLite Manager"は、追加とか削除の時に、使われるSQLステートメントを表示してくれるのでありがたい。
> 10数個のほぼ独立していそうな、「複数のキーフィールド+複数のデータフィールド」の"Table"だけで、"View"はなさそうなので、
> 思いっきり正規化してあってJOINを使い倒す、というようなDB構成では無いように見えます。
>
> 今動いているFirefoxのplaces.sqliteにはロックがかかっていて、"SQLite Manager"からはアクセスできないので、以下のようになるかな?
> (1) 複数のプロファイルを作り、現行プロファイルのplaces.sqliteを.../適当なディレクトリー/new-places.sqliteとかにコピー、
> (2) 二番目のプロファイルでFirefoxを起動し、.../new-places.sqlite をいじり倒す、
> (3) 三番目のプロファイルのplaces.sqliteを変更したもので置き換えて確認、
> (4) OKならば現行のプロファイルのplaces.sqliteを置き換えて確認。
>
> journalファイルなどは消さないといけないとか、ファイルのタイムスタンプが変わるので何か起こるとか、
> 手作業なので、テーブル内の複数の行の間の関連をきちんと維持して削除するのはほぼ不可能、
> とかいろいろありますから、注意深く作業する必要がありますけど。

う〜ん、自動で補正とかしてくれませんよね?
整合性を維持するだけでも、シャレにならないぐらい手間がかかる気が……。

Re[3]: places.sqlite内の削除方法がわからないデータ
(#46884) このトピック中4番目の投稿
(環境: WinXP SP3/SeaMonkey1.1)

> う〜ん、自動で補正とかしてくれませんよね?
> 整合性を維持するだけでも、シャレにならないぐらい手間がかかる気が……。

ほとんどのテーブルがキー=idだけのもので、二つのキーフィールドがあるのは一つのテーブルだけで、あといくつかはキーフィールドなし、という感じです。
あるテーブルについて全部の行を選択しておいて"Delete Selected"とやって、テーブル内のデータ全部を消し去る、は、
「places.sqliteの再作成以外に削除する方法」になるのではないですか?
ただし、この方法だと、UIの「Clear Private Data(Fx 3の場合)」のある項目をチェックする・しない、と同じことになってしまうかもしれないですけどね。

moz_inputhistoryやmoz_keywordsを気にしているのなら、適当なキー(id)のデータだけを手動で消すだけでOKのような気が...

Re[4]: places.sqlite内の削除方法がわからないデータ
(#46888) このトピック中5番目の投稿
(環境: Linux/Other)

> ほとんどのテーブルがキー=idだけのもので、二つのキーフィールドがあるのは一つのテーブルだけで、あといくつかはキーフィールドなし、という感じです。
> あるテーブルについて全部の行を選択しておいて"Delete Selected"とやって、テーブル内のデータ全部を消し去る、は、
> 「places.sqliteの再作成以外に削除する方法」になるのではないですか?
> ただし、この方法だと、UIの「Clear Private Data(Fx 3の場合)」のある項目をチェックする・しない、と同じことになってしまうかもしれないですけどね。
>
> moz_inputhistoryやmoz_keywordsを気にしているのなら、適当なキー(id)のデータだけを手動で消すだけでOKのような気が...

moz_keywordsのレコードを消したら、moz_bookmarksの対応するレコードのkeyword_idをNULLにしないとダメじゃないですか?
moz_keywordsを全部消す場合は多分こんな感じですかね。
DELETE FROM moz_keywords;
DELETE FROM sqlite_sequence;
UPDATE moz_bookmarks SET keyword_id = NULL;
ほかにも修正すべきところがあるかもしれませんが、よくわかってないです。

moz_inputhistoryは……Frecencyなども絡んでいてもっと複雑じゃないかと。

Re[5]: places.sqlite内の削除方法がわからないデータ
(#46891) このトピック中6番目の投稿
(環境: WinXP SP3/SeaMonkey1.1)

> moz_keywordsのレコードを消したら、moz_bookmarksの対応するレコードのkeyword_idをNULLにしないとダメじゃないですか?

JOINをかけていましたから、そのようですね。

> moz_inputhistoryは……Frecencyなども絡んでいてもっと複雑じゃないかと。

そんなに複雑ではなさそうに思えます。

places.sqliteの中にはViewは一個もないですし、MXRで"join moz_"を検索すると、どちらのテーブルも、JOINはせいぜい数個のテーブルとしか行われていないように見えます。
http://mxr.mozilla.org/mozilla-central/search?string=join+moz_&find=&findi=&filter=%5E%5B%5E%5C0%5D*%24&hitlimit=&tree=mozilla-central
(*のところでリンクが終わってしまうみたい...)

Re[6]: places.sqlite内の削除方法がわからないデータ
(#46894) このトピック中7番目の投稿
(環境: Linux/Other)

> そんなに複雑ではなさそうに思えます。
>
> places.sqliteの中にはViewは一個もないですし、MXRで"join moz_"を検索すると、どちらのテーブルも、JOINはせいぜい数個のテーブルとしか行われていないように見えます。
> http://mxr.mozilla.org/mozilla-central/search?string=join+moz_&find=&findi=&filter=%5E%5B%5E%5C0%5D*%24&hitlimit=&tree=mozilla-central
> (*のところでリンクが終わってしまうみたい...)

こんな感じのような。

moz_inputhistoryからレコードを削除。
moz_historyvisitsからそれに対応するレコードを削除。
moz_placesからそれに対応するレコードのvisit_countをマイナス、typedを0に、frecencyは再計算して置き替え?

誤認でなければ、こういう直接的なアプローチは無理があるんじゃないかと。

Re[7]: places.sqlite内の削除方法がわからないデータ
(#46899) このトピック中8番目の投稿
(環境: WinXP SP3/SeaMonkey1.1)

>(snip)
> moz_placesからそれに対応するレコードのvisit_countをマイナス、typedを0に、frecencyは再計算して置き替え?
> 誤認でなければ、こういう直接的なアプローチは無理があるんじゃないかと。

そういった処理をしないといけないようなフィールドを持っていましたか。
DBの仕様や定義の範囲外の、プログラムロジックによるフィールドや行間の関連がある場合には、
プログラムロジックに対応した処理をきちんとしてやらないといけないですから、
簡単なSQLステートメントを手で打っておしまい、というわけにはいかないですね。
そうなると、Firefoxの仕様やロジックにあわせて、オフラインのDB更新ユーティリティーを作るとか、機能拡張の形にしてオンラインでも動くようにする、というようなことが必要になりそうですね。

Re[8]: places.sqlite内の削除方法がわからないデータ
(#46909) このトピック中9番目の投稿
(環境: Linux/Other)

> そういった処理をしないといけないようなフィールドを持っていましたか。
> DBの仕様や定義の範囲外の、プログラムロジックによるフィールドや行間の関連がある場合には、
> プログラムロジックに対応した処理をきちんとしてやらないといけないですから、
> 簡単なSQLステートメントを手で打っておしまい、というわけにはいかないですね。
> そうなると、Firefoxの仕様やロジックにあわせて、オフラインのDB更新ユーティリティーを作るとか、機能拡張の形にしてオンラインでも動くようにする、というようなことが必要になりそうですね。

そのようなツールやアドオンをご存知ないですか?
moz_keywordsの削除は力技でも対応できそうとはいえ、あまり行儀はよくないですし。

Re[9]: places.sqlite内の削除方法がわからないデータ
(#46937) このトピック中10番目の投稿
(環境: WinXP SP3/SeaMonkey1.1)

> そのようなツールやアドオンをご存知ないですか?
> moz_keywordsの削除は力技でも対応できそうとはいえ、あまり行儀はよくないですし。

"firefox sqlite places.sqlite moz_keywords moz_inputhistory"でググってみました。
ヒットしてでてきた中で有用そうなものは、以下のものかな?
(A) Mozilla Firefox 3 History File Format
http://www.forensicswiki.org/index.php?title=Mozilla_Firefox_3_History_File_Format
(B) Mozilla.org にある、Places.sqlite.schema3.pdf
https://wiki.mozilla.org/images/d/d5/Places.sqlite.schema3.pdf
(C) Firefox 3 Hacks,Section 22.履歴とブックマークのデータベース「Places」の正体知る
http://books.google.com/books?id=okzxk_bIh5UC
http://books.google.com/books?id=okzxk_bIh5UC&printsec=frontcover#PPA137,M1

ユーザーのお好みのゴミ掃除を行ってくれるようなアドオンなどは、まだなさそうです。
(A)の中の外部リンクも、Places DBなどの中身の解析用のものだけ、という感じがします。
上記の資料などを参考に、PHPとかPerlとかで簡単なスクリプトを作ってSQLステートメントを発行、というのが、一番シンプルな方法のように思えます。
既存のアドオンなどで簡単に、というわけにはいかないですが、たいした力技でもないし、行儀が良くない方法では無いでしょう。


このトピックの全ページ / [0]

返信不可


- Child Tree -