DuckDBInspectorでデータを参照する
概要
DuckDBInspectorは、DuckDBファイルのテーブルとデータを確認するChrome拡張です。MyMemのバックアップから取り出した .duckdb を開き、保存された内容をSQLで参照できます。
DuckDBInspectorは配布準備中です。Chromeウェブストアの配布URLは、公開後にこのページへ掲載します。 MyMem PRO本体のインストールURLと取り違えないでください。以下は提供予定の画面に沿った説明です。
利用条件
バックアップZIPを展開し、duckdb/ 内の .duckdb ファイルを作業用にコピーします。DuckDBInspectorを利用できる方は、そのローカルファイルを開いてください。ファイルを開く入口の名称は配布版の画面で確認します。
参照用SQLは通常のDuckDBでも利用できます。MyMemへの接続や、実行中のMyMemのDBファイルの取り出しは不要です。
使い方
画面の見方
| 表示 | 確認できること |
|---|---|
上部の Local: ...duckdb | 現在開いているローカルファイル名 |
Read-only | 読み取り専用の表示であること |
左側の Database Structure | main スキーマ内のテーブル一覧 |
| 中央のテーブル | SQL結果の各行と列。見出しに列名と型を表示 |
右側の Table Meta | 選択テーブルの名前、Schema、Columns、Rows、各列の型 |
下側の SQL Query | 参照用SQLの入力欄。画面の案内は Read-only / SELECT only |
Execute | 入力した参照用SQLを実行 |
Copy Selected | 選択した結果のコピー。コピー先に会話や個人情報が含まれないか確認 |
スキーマはテーブルの所属する区分です。このバックアップでは通常 main です。テーブルは同じ種類のレコードの集まり、行は1件のレコード、列はその項目です。例えば memory が記憶のテーブル、content が本文を入れる列です。
「全体の件数」と「今見えている行」を分ける
右側の Table Meta → Rows と、中央の結果下部の件数は、対象が異なります。
例えば、テーブル全体が2,000件で、SQLに LIMIT 100、1ページに5行を表示している場合、全体2,000件・SQL結果100件・今見えている5件です。Next / Prev と Rows per page は結果表示の移動に使います。Preview の値や見えている行数を、テーブル全体の件数として数えないでください。
正確な件数をSQLで調べるには次を実行します。
SELECT COUNT(*) AS row_count
FROM embedding_vector_archive;
この件数はベクトル履歴の件数です。現在の記憶数を表すものではありません。ベクトル履歴の意味も確認してください。
テーブルと列の一覧を調べる
以下の例は、画面の SELECT only に合わせてすべて SELECT 文にしています。1つずつ入力して実行してください。
SELECT table_catalog, table_schema, table_name, table_type
FROM information_schema.tables
WHERE table_schema = 'main'
ORDER BY table_catalog, table_name;
memory の列を保存順に確認します。他のテーブルを見るときは、文字列 'memory' を置き換えます。
SELECT ordinal_position, column_name, data_type
FROM information_schema.columns
WHERE table_schema = 'main'
AND table_name = 'memory'
ORDER BY ordinal_position;
複数ファイルを同時に開いて同名テーブルが複数ある場合は、結果の table_catalog も確認してください。列の型と並びの最終的な根拠は、自分のファイルに対するこの結果です。全テーブルの列と型と比較できます。DuckDBのメタデータ参照方法は公式Information Schemaにも説明があります。
記憶と会話を少しだけ見る
長い本文やベクトル配列を全件表示せず、最初は必要な列だけ100件以内で確認します。記憶の本文は、新旧の保存形式を考慮して COALESCE(content, text) で読みます。
SELECT id, term, memory_type, source, project_id,
LEFT(COALESCE(content, text, ''), 200) AS content_preview,
created_at, updated_at
FROM memory
ORDER BY updated_at DESC NULLS LAST
LIMIT 100;
会話一覧を確認します。ここでの1行は会話1件で、発言1件ではありません。
SELECT session_id, title, provider, message_count, last_message_at
FROM session_log
ORDER BY last_message_at DESC NULLS LAST
LIMIT 100;
本文、保存元、要約へのつながりは記憶・会話・要約の構造で説明します。
DuckDBのコマンドラインから開く場合
DuckDB CLIを導入済みの方は、作業用ファイルを読み取り専用で開けます。ファイルパスは自分の展開先に置き換えてください。
duckdb -readonly './duckdb/mymem_duckdb_dump_20261015_2226.duckdb'
-readonly の意味と導入方法はDuckDB公式CLIガイドを参照してください。MyMemで使うための必須ツールではありません。
注意点
バックアップのスキーマは稼働中DBと完全には同じではない
現在の通常バックアップは、元DBの基本テーブルの列名・型・行データから新しいファイルを作成します。元の主キー・外部キー・NOT NULL・DEFAULT・インデックス・ビューをそのまま複製する方式ではありません。そのため、バックアップ側に主キー表示や unified_search ビューがないことだけで、破損とは判断できません。テーブル同士のIDの対応は残ります。
MyMemへの復元は、MyMem側のテーブル定義と復元処理を使います。Inspectorで列やIDを修正して、稼働中のDBへ戻す手順ではありません。
開けない・テーブルが見つからないとき
| 状況 | 確認すること |
|---|---|
| ZIPを開こうとしている | ZIPを展開し、.duckdb を選んでいるか |
| DuckDB形式の互換性エラー | 読み取りツールが、そのファイルを作成したDuckDBの保存形式に対応しているか |
| 特定のテーブルがない | version.json の版、機能の利用履歴、実際のテーブル一覧 |
| 列がないと言われる | 先に information_schema.columns で自分のファイルの列を確認 |
| 0件になる | 未使用の機能、条件で除外した結果、まだ作られていない要約などを区別 |
| テーブルの表示が重い | ベクトルや長文を外し、必要な列と小さい LIMIT から確認 |
DuckDBの保存形式は、製品の版番号やZIPの形式番号とは別です。古いDuckDBで新しい保存形式を必ず読めるわけではありません。公式の保存形式と互換性を参照し、原本を保管したまま対応するツールで開いてください。
TIMESTAMP 型自体にはタイムゾーン情報がありません。MyMemがISO時刻から保存した値と、Inspectorが付ける GMT などの表示を区別してください。thinking_analysis など、日時を文字列として保存するテーブルもあります。