Cloudflare D1 を Alpha 版からマイグレートする

懐かし掲示板 BBS で使っている Cloudflare D1。SQLite データベースだが、コチラの Alpha 版が 2024-08-15 にクローズして正式版になるようで、マイグレーションしてねと通知が来たので対応する。


$ npm install -g wrangler
$ wrangler -v

 ⛅️ wrangler 3.64.0
$ wrangler d1 info legacy-of-bbs

 ⛅️ wrangler 3.64.0
-------------------

┌───────────────┬──────────────────────────────────────┐
│ DB            │ xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx │
├───────────────┼──────────────────────────────────────┤
│ name          │ legacy-of-bbs                        │
├───────────────┼──────────────────────────────────────┤
│ created_at    │                                      │
├───────────────┼──────────────────────────────────────┤
│ version       │ alpha                                │
├───────────────┼──────────────────────────────────────┤
│ num_tables    │ 3                                    │
├───────────────┼──────────────────────────────────────┤
│ database_size │ 344 kB                               │
└───────────────┴──────────────────────────────────────┘
$ wrangler d1 backup create legacy-of-bbs
┌──────────────────────────┬──────────────────────────────────────┬────────────┬────────┬───────┐
│ created_at               │ id                                   │ num_tables │ size   │ state │
├──────────────────────────┼──────────────────────────────────────┼────────────┼────────┼───────┤
│ 2024-07-16T09:28:06.983Z │ yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy │ 3344 kB │ done  │
└──────────────────────────┴──────────────────────────────────────┴────────────┴────────┴───────┘
$ wrangler d1 backup download legacy-of-bbs yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy
🌀 Downloading backup yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy from 'legacy-of-bbs'
🌀 Saving to /home/neo/Documents/Dev/GitHub/legacy-of-bbs/legacy-of-bbs.yyyyyyyy.sqlite3
🌀 Done!
$ sqlite3 --version
3.42.0 2023-05-16 12:36:15 831d0fb2836b71c9bc51067c49fee4b8f18047814f2ff22d817d25195cf350b0
$ sqlite3 ./legacy-of-bbs.yyyyyyyy.sqlite3 .dump > db.sql
$ wrangler d1 create legacy-of-bbs-20240716

 ⛅️ wrangler 3.64.0
-------------------

✅ Successfully created DB 'legacy-of-bbs-20240716' in region APAC
Created your new D1 database.

[[d1_databases]]
binding = "DB" # i.e. available in your Worker on env.DB
database_name = "legacy-of-bbs-20240716"
database_id = "zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz"
$ wrangler d1 execute legacy-of-bbs-20240716 --remote --file=./db.sql

 ⛅️ wrangler 3.64.0
-------------------

✔ ⚠️ This process may take some time, during which your D1 database will be unavailable to serve queries.
  Ok to proceed? … yes
🌀 Executing on remote database legacy-of-bbs-20240716 (zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz):
🌀 To execute on your local development database, remove the --remote flag from your wrangler command.
Note: if the execution fails to complete, your DB will return to its original state and you can safely retry.
├ 🌀 Uploading zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz.zzzzzzzzzzzzzzzz.sql 
│ 🌀 Uploading complete.
│ 
🌀 Starting import...
🚣 Executed 1166 queries in 0.04 seconds (2163 rows read, 2251 rows written)
   Database is currently at bookmark 00000000-0000000f-00004dd0-843e4bf18c5f1d42f18aafa13380ea18.
┌────────────────────────┬───────────┬──────────────┬────────────────────┐
│ Total queries executed │ Rows read │ Rows written │ Database size (MB) │
├────────────────────────┼───────────┼──────────────┼────────────────────┤
│ 1166216322510.27               │
└────────────────────────┴───────────┴──────────────┴────────────────────┘
$ wrangler d1 delete legacy-of-bbs
$ wrangler d1 info legacy-of-bbs-20240716

 ⛅️ wrangler 3.64.0
-------------------

┌───────────────────┬──────────────────────────────────────┐
│ DB                │ zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz │
├───────────────────┼──────────────────────────────────────┤
│ name              │ legacy-of-bbs-20240716               │
├───────────────────┼──────────────────────────────────────┤
│ created_at        │ 2024-07-16T09:34:13.005Z             │
├───────────────────┼──────────────────────────────────────┤
│ num_tables        │ 4                                    │
├───────────────────┼──────────────────────────────────────┤
│ running_in_region │ APAC                                 │
├───────────────────┼──────────────────────────────────────┤
│ database_size     │ 274 kB                               │
├───────────────────┼──────────────────────────────────────┤
│ read_queries_24h  │ 0                                    │
├───────────────────┼──────────────────────────────────────┤
│ write_queries_24h │ 1                                    │
├───────────────────┼──────────────────────────────────────┤
│ rows_read_24h     │ 2,163                                │
├───────────────────┼──────────────────────────────────────┤
│ rows_written_24h  │ 2,251                                │
└───────────────────┴──────────────────────────────────────┘

というワケで、Alpha 版の DB から SQL 文を出力して、新 DB を立ててそちらに流す、という原始的なマイグレーション方法だった。

あとは Cloudflare Pages で新 DB を接続するように環境設定をし直して再デプロイすれば作業完了。