place.sqliteに問題がありますか?奇妙に振る舞うようです。 $LAST_VISITED_URLを取得する方法は?

place.sqliteに問題がありますか?奇妙に振る舞うようです。 $LAST_VISITED_URLを取得する方法は?

出版しましたここ

これは私のものです。last-url.sh

    #!/bin/bash
    
    rm  -rf /tmp/db.sqlite 
    cp ~/.mozilla/firefox/*.default-esr/places.sqlite /tmp/db.sqlite ;
    LAST_URL=`sqlite3 /tmp/db.sqlite "select url from moz_places order by last_visit_date desc limit 1;"`;

    echo $LAST_URL

私のスクリプトは引き続き例を提供します。stackoverflow.com代わりにURLyoutube.com一方、ページをリロードしても同じです。

問題はどこにありますか?

プロフィールは1つだけですxxxxxx.default-esr

スクリーンショット: Firefoxの歴史 SQLiteデータベース

テスト例:「google test」は新しく訪問したURLで、他のページは更新されます。

今、私はFirefoxが(実際の履歴を反映する)履歴タブをどのように生成するかを諮問しています。どのファイルまたはSQLリクエストを使用しましたか? SQLite?

答え1

スクリプトの変更

 #!/bin/bash
    
    rm  -rf /tmp/db.sqlite 
    cp ~/.mozilla/firefox/*.default-esr/places.sqlite /tmp/db.sqlite ;
    ORIG_QUERY=`select url from moz_places order by last_visit_date desc limit 1;`
    NEW_QUERY=`SELECT url FROM moz_places WHERE visited_count >=1 GROUP BY last_visit_date DESC ORDER BY id LIMIT 1
    LAST_URL=`sqlite3 /tmp/db.sqlite ${QUERY}`;
    TEST_URL=`sqlite3 /tmp/db.sqlite ${NEW_QUERY};`

    #echo $LAST_URL
    echo $TEST_URL

説明する

質問 以下の説明に基づいて、OPはデータベースがゼロベースでないことを確認しました。私のSQLは少し錆びましたが、保存されたクエリは「新しい()または更新()のいずれ${NEW_QUERY}かのURLの最初の行を返す必要があります。ここで、sは最大から最小までの日付でグループ化されています」言い換えれば:visit_count=1visit_count > 1id

今日の1,000ページ、昨日の500ページにアクセスして制限がない場合は、今日の日付の下に1,000ページ、昨日の日付の下に500ページをリストし、一番上にビッ​​グIDを表示する必要があります。 LIMITを設定すると、ページの更新を含む日付ごとにid最も高いURLが返されるはずです。last_visited

答え2

答えは次のように始まります。ここjscher2000に感謝しますが、まだ解決策はありません。

一部の履歴はメモリにキャッシュできますが、ライブラリウィンドウには多くの項目が表示されるため、ディスクから情報を検索できます。 SQLiteエンジンはplace.sqliteファイルとそのログファイルからこのビューを構築するので、単にファイルを扱うよりも完全なビューを持ちます。

おそらく解決策はこのようなツールから来ることができます。wal2jsonplace.sqlite.walを解析してみてください。一度試してみましょう。

@jscher2000が言ったように

Firefox は -wal ファイルと -shm ファイルを作成します。 ...SQLite3が自動的に処理しない理由は混乱しています。 ...https://www.sqlite.org/wal.html

関連情報