D1: 削除したデータベースの復元(undelete)は削除から 7 日以内に限られる
D1 の undelete API が受け付けるのは、削除から 7 日(7 × 24 時間)以内のデータベースだけになった。誤って消したら 7 日以内に、できるだけ早く復元リクエストを送る。
いつ使うか
wrangler d1 deleteやダッシュボードで本番の D1 を誤って消したとき- テナントごとに D1 を作って消す構成で、削除処理にバグがあったとき(D1 制御プレーンの設計パターン: ホットパスから中央 DB を外す のような自動削除を持つ場合)
7 日を過ぎた削除済みデータベースに undelete を送るとエラーになる(2026-10-23 の変更)。
手順(REST API)
API トークンで POST /accounts/{account_id}/d1/database/{database_id}/undelete を呼ぶ。database_id は削除前の UUID なので、削除時のログやデプロイ設定(wrangler.jsonc の database_id)から控えておく。
sh
curl -X POST \
"https://api.cloudflare.com/client/v4/accounts/$ACCOUNT_ID/d1/database/$DATABASE_ID/undelete" \
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN"- 復元後の名前は削除時と同じ。別名にしたいときはリクエストで
new_nameを指定する(同名の DB を作り直してしまった場合など) - すでに削除されていない DB に送っても変更なしで成功する。ただし
new_nameが現在の名前と違うとエラー - 復元した DB はアカウントの上限(DB 数など)に数えられる
注意点
- Time Travel は undelete より前に戻せない: 復元後、Time Travel(ポイントインタイム復旧)で戻せるのは undelete より後の状態だけ。undelete 時点やそれ以前のブックマーク・時刻は指定できない。復元直後に
wrangler d1 exportなどでスナップショットを取っておくと安心 - 7 日の猶予は「削除からの経過時間」。週末をまたぐと気づいたときには間に合わないことがあるので、削除を伴う運用(テナント削除バッチなど)は削除イベントをログや通知に残し、
database_idを 7 日以上保存しておく - 7 日を過ぎたら戻せない前提で、消す前の
wrangler d1 export --remoteを削除手順に組み込むのが確実 - 自動削除を持つ制御プレーンは、即削除ではなく「論理削除 → 一定期間後に物理削除」にしておくと undelete の期限に依存しなくて済む