OpenClawを、
2026.9.2
↓
2026.9.3
へアップデートしようとしたところ、SQLite側の更新は進んだものの、OpenClaw本体のバージョンアップに失敗しました。
その結果、
OpenClaw本体
2026.9.2
SQLite
2026.9.3で更新された状態
という不整合が発生し、次のエラーが表示されました。
SQLite schema is incomplete or noncanonical for ~/.openclaw/state/openclaw.sqlite:
column definitions differ for skill_workshop_collection_reviews
missing or drifted index
idx_skill_workshop_collection_reviews_workspace_time
column definitions differ for skill_workshop_proposals
今回は、SQLiteを手作業で修正するのではなく、
失敗していたOpenClaw本体のアップデートを完了させ、2026.9.3へ揃える
ことで復旧できました。
この記事では、今回実際に行った確認と復旧手順を、サーバー固有のユーザー名やホスト名を除いてまとめます。
今回のトラブルの流れ
もともと使用していたOpenClawは、
OpenClaw 2026.9.2
でした。
これを、
OpenClaw 2026.9.3
へアップデートしようとしました。
ところが、アップデート処理の途中でOpenClaw本体の更新に失敗しました。
その一方で、OpenClawが利用する、
~/.openclaw/state/openclaw.sqlite
には、すでに2026.9.3側の変更が一部反映されていました。
結果として、
OpenClaw実行ファイル
2026.9.2
SQLiteの内部状態
2026.9.3で更新済み
という状態になりました。
これが今回の noncanonical schema エラーの原因でした。
発生したエラー
OpenClaw実行時に、次のようなメッセージが表示されました。
SQLite schema is incomplete or noncanonical for ~/.openclaw/state/openclaw.sqlite
詳細には、
column definitions differ for skill_workshop_collection_reviews
missing or drifted index
idx_skill_workshop_collection_reviews_workspace_time
column definitions differ for skill_workshop_proposals
と表示されました。
つまりOpenClaw 2026.9.2が、
自分が期待しているSQLiteスキーマ
と、
実際のopenclaw.sqlite
を比較した結果、列定義やインデックスが一致しなかったということです。
いきなりSQLiteを削除しない
このエラーを見ると、
rm ~/.openclaw/state/openclaw.sqlite
でDBを消したくなるかもしれません。
しかし、これはおすすめしません。
openclaw.sqlite にはOpenClawの状態情報が保存されています。
また、
DROP TABLE
ALTER TABLE
CREATE INDEX
などを使って、エラーメッセージに合わせて手作業でスキーマを修正するのも危険です。
今回のように複数のテーブルやインデックスが同時に変更されている場合、1か所だけ直しても別の不整合が残る可能性があります。
STEP1:現在のOpenClawバージョンを確認
まず、実際に動いているOpenClaw本体を確認します。
openclaw --version
今回確認した結果は、
OpenClaw 2026.9.2
でした。
つまり、2026.9.3へのアップデートを実施したはずなのに、実行ファイルは2026.9.2のままでした。
続いて、どのOpenClawを実行しているか確認します。
which openclaw
npmグローバルインストール環境なら、例えば、
/home/USER/.npm-global/bin/openclaw
のようなパスになります。
STEP2:Gatewayを停止する
DBの確認やバックアップを行う前に、Gatewayを停止します。
openclaw gateway stop
SQLiteの調査中にOpenClaw側から書き込みが行われるのを避けるためです。
STEP3:必ずバックアップを取る
まず openclaw.sqlite をコピーします。
cp ~/.openclaw/state/openclaw.sqlite \
~/.openclaw/state/openclaw.sqlite.$(date +%Y%m%d-%H%M%S).bak
さらに安全のため、.openclaw ディレクトリ全体もバックアップしました。
cp -a ~/.openclaw \
~/.openclaw.backup-$(date +%Y%m%d-%H%M%S)
アップデート失敗時の調査では、DBだけではなくOpenClaw全体の状態を残しておく方が安心です。
STEP4:SQLite自体が壊れていないか確認
まず、SQLiteそのものの整合性を確認します。
sqlite3 ~/.openclaw/state/openclaw.sqlite \
"PRAGMA integrity_check;"
正常なら、
ok
と表示されます。
ここで ok なら、
SQLiteファイルそのものが壊れている
可能性は低くなります。
今回の問題はDB破損ではなく、
OpenClaw本体とDBスキーマの不一致
でした。
STEP5:SQLiteのschema versionを確認
次に、
sqlite3 ~/.openclaw/state/openclaw.sqlite \
"PRAGMA user_version;"
を実行しました。
結果は、
15
でした。
ここで少し混乱しやすいポイントがあります。
OpenClaw 2026.9.2でも、
schema version 15
です。
そして今回のDBも、
schema version 15
でした。
つまり、
schema versionだけを見ると一致している
状態でした。
それでも実際にはスキーマ不一致が発生していました。
STEP6:schema_metaを確認する
原因特定で最も重要だったのが、
schema_meta
です。
次のSQLを実行しました。
sqlite3 ~/.openclaw/state/openclaw.sqlite \
"SELECT meta_key,role,schema_version,app_version,updated_at FROM schema_meta;"
すると、重要な行として、
primary|global|15|2026.9.3|...
が確認できました。
ここで重要なのは、
schema_version = 15
app_version = 2026.9.3
という点です。
一方、OpenClaw本体は、
openclaw --version
で、
OpenClaw 2026.9.2
でした。
つまり、
実行中のOpenClaw
2026.9.2
DBを更新したOpenClaw
2026.9.3
となっていました。
ここで今回の原因がほぼ確定しました。
今回の原因
2026.9.2から2026.9.3へのアップデート中に、
SQLite側のマイグレーション
↓
実行された
OpenClaw本体の更新
↓
失敗した
と考えられます。
その結果、
アップデート前
OpenClaw 2026.9.2
│
▼
SQLite 2026.9.2相当
だったものが、
アップデート途中
OpenClaw 2026.9.2 ← 本体更新失敗
│
×
│
SQLite 2026.9.3相当 ← DB側は更新済み
という不整合になりました。
schema versionが15のままでも不一致になった
今回特に重要だった点です。
DB側は、
PRAGMA user_version = 15
でした。
つまり、
2026.9.2
schema 15
2026.9.3
schema 15
のように、数値上は同じschema versionでした。
しかし実際には、その同じschema version 15の中でも、2026.9.2と2026.9.3で一部のテーブル定義が変わっていました。
そのため、
schema versionが同じ
=
完全に同じDB定義
ではありませんでした。
STEP7:実際のテーブル定義を確認
エラーに出ていた、
skill_workshop_collection_reviews
を確認しました。
sqlite3 ~/.openclaw/state/openclaw.sqlite \
".schema skill_workshop_collection_reviews"
DB側では例えば、
owner_agent_id
を持つ定義になっていました。
インデックスも、
idx_skill_workshop_collection_reviews_owner_time
になっていました。
ところが2026.9.2側は、
idx_skill_workshop_collection_reviews_workspace_time
を期待していました。
つまり、DBは明らかに2026.9.2が期待する形とは違っていました。
skill_workshop_proposalsも確認
続いて、
sqlite3 ~/.openclaw/state/openclaw.sqlite \
".schema skill_workshop_proposals"
を確認しました。
こちらも、
owner_agent_id
を含む定義になっており、OpenClaw 2026.9.2が期待している定義とは一致していませんでした。
つまり今回の問題は、
インデックス1個だけがおかしい
というレベルではなく、
複数テーブルの定義が2026.9.3側へ進んでいる
状態でした。
SQLiteを手動で2026.9.2へ戻さなかった理由
この時点で、
ALTER TABLE
や、
CREATE INDEX
を使って2026.9.2向けに戻す方法も考えられます。
しかし今回は行いませんでした。
理由は、
skill_workshop_collection_reviews
skill_workshop_proposals
関連インデックス
など複数箇所が変更されていたためです。
一部だけ直すと、
最初のエラーは消えた
↓
次のテーブル不一致
↓
さらに別の不一致
という状態になる可能性があります。
さらに、テーブルを作り直す過程でOpenClawの状態データを失う危険もあります。
STEP8:OpenClaw本体を2026.9.3へ揃える
今回の復旧では、
DBを2026.9.2へ戻す
のではなく、
OpenClaw本体を2026.9.3へ更新し直す
方法を取りました。
つまり、
復旧前
OpenClaw
2026.9.2
SQLite
2026.9.3相当
を、
復旧後
OpenClaw
2026.9.3
SQLite
2026.9.3相当
に揃えます。
STEP9:npmで2026.9.3を再インストール
npmのグローバルインストールを使用している場合は、
npm list -g --depth=0 | grep openclaw
で現在のインストール状態を確認します。
そして、2026.9.3を明示的にインストールします。
npm install -g openclaw@2026.9.3
今回のポイントは、
latest
ではなく、
2026.9.3
を明示的に指定することです。
DBの schema_meta.app_version が、
2026.9.3
だったため、本体も同じバージョンへ揃えました。
STEP10:2026.9.3になったことを確認
インストール後、
openclaw --version
を実行します。
期待する結果:
OpenClaw 2026.9.3
さらに、
which openclaw
で、意図した実行ファイルを使用していることも確認します。
npm環境によっては複数のOpenClawがPATH上に存在する可能性もあるため、バージョンだけでなく実行パスも確認しておくと安全です。
STEP11:doctorを実行
OpenClaw本体が2026.9.3になったら、
openclaw doctor
を実行します。
ここで、
SQLite schema is incomplete or noncanonical
が表示されなくなれば、OpenClaw本体とSQLiteの不一致が解消したと判断できます。
今回も、この方法でエラーが解消しました。
STEP12:Gatewayを起動
問題がなければ、
openclaw gateway start
でGatewayを起動します。
続いて、
openclaw models status
など通常使用しているコマンドを実行し、OpenClawが正常に動作することを確認します。
今回の復旧手順まとめ
今回実際に行った流れをまとめると、
OpenClaw 2026.9.2
↓
2026.9.3へアップデート
↓
本体のVerUPに失敗
↓
DBだけ2026.9.3側へ更新
↓
OpenClaw 2026.9.2で起動
↓
SQLite schema is incomplete or noncanonical
という状態でした。
復旧は、
1. OpenClaw本体のバージョン確認
2. Gateway停止
3. ~/.openclaw をバックアップ
4. SQLite integrity_check
5. PRAGMA user_version確認
6. schema_meta.app_version確認
7. 問題テーブルの.schema確認
8. 本体2026.9.2 / DB2026.9.3の不一致を特定
9. npmでOpenClaw 2026.9.3を再インストール
10. openclaw --version確認
11. openclaw doctor
12. Gateway起動
13. 通常動作確認
という流れです。
コピペ用・確認コマンド
OpenClaw本体確認
openclaw --version
which openclaw
Gateway停止
openclaw gateway stop
DBバックアップ
cp ~/.openclaw/state/openclaw.sqlite \
~/.openclaw/state/openclaw.sqlite.$(date +%Y%m%d-%H%M%S).bak
.openclaw 全体バックアップ
cp -a ~/.openclaw \
~/.openclaw.backup-$(date +%Y%m%d-%H%M%S)
SQLite整合性確認
sqlite3 ~/.openclaw/state/openclaw.sqlite \
"PRAGMA integrity_check;"
schema version確認
sqlite3 ~/.openclaw/state/openclaw.sqlite \
"PRAGMA user_version;"
DBを更新したOpenClawバージョン確認
sqlite3 ~/.openclaw/state/openclaw.sqlite \
"SELECT meta_key,role,schema_version,app_version,updated_at FROM schema_meta;"
今回のポイントとなった表示:
primary|global|15|2026.9.3|...
skill_workshop_collection_reviews確認
sqlite3 ~/.openclaw/state/openclaw.sqlite \
".schema skill_workshop_collection_reviews"
skill_workshop_proposals確認
sqlite3 ~/.openclaw/state/openclaw.sqlite \
".schema skill_workshop_proposals"
OpenClaw 2026.9.3へ更新
npm install -g openclaw@2026.9.3
バージョン再確認
openclaw --version
which openclaw
診断
openclaw doctor
Gateway起動
openclaw gateway start
最終確認
openclaw models status
今回分かった重要ポイント
1. OpenClawのアップデートは本体とDBが同時に成功するとは限らない
今回、
2026.9.2
↓
2026.9.3
へのアップデートを実施しましたが、
DB更新
→ 成功
本体更新
→ 失敗
という状態になりました。
そのため、
アップデート後は必ず openclaw --version を確認する
ことが重要です。
2. schema versionだけでは判断できない
今回、
PRAGMA user_version = 15
でした。
OpenClaw本体も2026.9.2なので、一見すると問題がなさそうに見えます。
しかし、
schema_meta.app_version = 2026.9.3
でした。
つまり、原因調査では、
PRAGMA user_version
だけでなく、
schema_meta.app_version
を見ることが非常に重要です。
3. アップデート失敗後にnoncanonicalが出たら本体バージョンを確認する
今回のように、
OpenClaw更新
↓
何らかのエラー
↓
SQLite schema is incomplete or noncanonical
となった場合は、まず、
openclaw --version
を確認します。
アップデートしたつもりでも、
旧バージョンのまま
という可能性があります。
4. DBを手修正する前に本体を正しいバージョンへ揃える
今回の最大のポイントです。
エラーには、
column definitions differ
や、
missing or drifted index
と表示されます。
しかし、それを見てすぐ、
ALTER TABLE
CREATE INDEX
する必要はありません。
今回のようなアップデート失敗なら、
DBが新しい
本体が古い
だけの可能性があります。
まず、
OpenClaw本体
をDB側に揃える方が安全です。
5. アップデート前に~/.openclawをバックアップしておく
今後の予防策として、OpenClawをアップデートする前に、
cp -a ~/.openclaw \
~/.openclaw.backup-$(date +%Y%m%d-%H%M%S)
でバックアップしておくと安心です。
アップデート後は、
openclaw --version
openclaw doctor
を実行して、
本体バージョン
DBスキーマ
設定
に問題がないことを確認します。
まとめ
今回のトラブルは、
OpenClaw 2026.9.2
↓
2026.9.3へアップデート
↓
SQLite側は2026.9.3へ更新
↓
OpenClaw本体のVerUPだけ失敗
↓
本体は2026.9.2のまま
↓
DBとのスキーマ不一致
↓
SQLite schema is incomplete or noncanonical
という流れで発生しました。
調査の決め手となったのは、
openclaw --version
と、
sqlite3 ~/.openclaw/state/openclaw.sqlite \
"SELECT meta_key,role,schema_version,app_version,updated_at FROM schema_meta;"
です。
実際には、
OpenClaw本体
2026.9.2
schema_meta.app_version
2026.9.3
という不一致が確認できました。
そこでSQLiteを直接修正せず、
npm install -g openclaw@2026.9.3
でOpenClaw本体を2026.9.3へ更新し直しました。
その後、
openclaw --version
openclaw doctor
openclaw gateway start
と確認し、正常復旧できました。
今回のケースから、
OpenClawのアップデート失敗後にSQLite schemaエラーが出たら、DB破損を疑う前に「本体のバージョンアップだけ失敗していないか」を確認する
ことが非常に重要だと分かりました。

