Cloudflare D1 が本当にトランザクションをサポートしていないのか確かめた
最近、こんな記事を見ました。 Cloudflare D1でトランザクションが使えない問題 Zenn このブログしかり、Cloudflare で D1 を使って色々アプリケーションを動かしているので、ちゃんと自分の手で確かめてみよう、と思い確認してみました。 結論 SQLite はトランザクションをサポートしている。 Cloudflare D1 ではネイティブトランザクションをサポートしていないが、batch() によって制約はあるもののトランザクションを実現できる。 実際にやってみる SQLite はトランザクションを正式にサポートしています。 ローカル D1 環境で、実際にトランザクションが機能するかどうかを確認していきます。 wrangler init d1test category は Hello World Example、type は Worker Only を選択しました。 "d1_databases": [ { "binding": "DB", "database_name": "d1test-db", } ] セットアップ直後ではローカルDBは構築されていませんが、以下のようなコマンドを実行することで作成されます。 npx wrangler d1 execute d1test-db --local --command "select * from users" 以下のように sqlite ファイルが作成されていればOKです。 % ls .wrangler/state/v3/d1/miniflare-D1DatabaseObject e7352547963de7050bd7d94658afc4fe78b61811b7815da12d90be8e863abf4d.sqlite e7352547963de7050bd7d94658afc4fe78b61811b7815da12d90be8e863abf4d.sqlite-shm e7352547963de7050bd7d94658afc4fe78b61811b7815da12d90be8e863abf4d.sqlite-wal SQLite コマンドでデータベースに接続します。 ...