ฐานข้อมูล D1 และ R2 · D1 database & R2
On this page
หน้านี้เป็นคู่มือดูแลฐานข้อมูล D1 nvx-db ของ DevStack และบันทึกสถานะของ R2 schema อธิบายไว้ที่ architecture/chat-data-model.md และ reference/d1-schema.md
ทรัพยากรที่มี#
| ทรัพยากร | ค่า | สถานะ |
|---|---|---|
| D1 database | nvx-db, id 3ee9bbab-06b5-49da-b175-5f7162ad5086, region WNAM |
สร้าง 11 ต.ค. 2026; migration 0001 และ 0002 apply บน remote แล้ว |
| Binding ใน Worker | DB (ชนิด D1Database ใน cloudflare-env.d.ts) |
อยู่ใน wrangler.jsonc; ยังไม่มีโค้ดใช้ |
| R2 bucket | nvx-assets, binding ASSETS_BUCKET |
ยังไม่ได้สร้าง: บัญชียังไม่เปิด R2 |
บัญชี 2d92bd5b25768fa9093d6adc0a8887fc ใช้ token CLOUDFLARE_API_TOKEN_EXAMPLESSDK (มีสิทธิ์ D1 Edit) ส่วน CLOUDFLARE_API_TOKEN_DEVSTACK ไม่มีสิทธิ์ D1 และ R2
คำสั่ง#
ทุกคำสั่งที่มี --remote เขียนลงฐานข้อมูลจริง จึงต้องได้รับอนุมัติก่อน ส่ง token ผ่าน env ของคำสั่งเท่านั้น ห้ามพิมพ์ออกมา
# ทดลองบนเครื่อง (สร้างฐานข้อมูลจำลองใน .wrangler/state)
npm run db:migrate:local
# ดูว่า migration ไหนยังไม่ได้ apply บน remote
CLOUDFLARE_API_TOKEN="$CLOUDFLARE_API_TOKEN_EXAMPLESSDK" CLOUDFLARE_ACCOUNT_ID=2d92bd5b25768fa9093d6adc0a8887fc npm run db:migrations:list
# apply บน remote (ต้องอนุมัติ)
CLOUDFLARE_API_TOKEN="$CLOUDFLARE_API_TOKEN_EXAMPLESSDK" CLOUDFLARE_ACCOUNT_ID=2d92bd5b25768fa9093d6adc0a8887fc npm run db:migrate:remote
# query แบบอ่านอย่างเดียว
npx wrangler d1 execute nvx-db --remote --command "select * from schema_meta"เพิ่ม migration ใหม่#
- สร้างไฟล์ใหม่ใน
migrations/ตามลำดับเลข เช่น0003_add_message_index.sql(หรือใช้npx wrangler d1 migrations create nvx-db <name>) ห้ามแก้ไฟล์ที่ apply แล้ว - อัปเดต
schema_versionในschema_metaท้ายไฟล์ - รัน
npm run db:migrate:localแล้วทดสอบ constraint ที่เกี่ยวข้อง - อัปเดต reference/d1-schema.md และ architecture/chat-data-model.md แล้วรัน
npm run docs:check - ขออนุมัติ แล้วรัน
npm run db:migrate:remoteก่อน deploy โค้ดที่ใช้ schema ใหม่
สำรองและกู้คืน#
D1 มี Time Travel กู้คืนย้อนหลังได้ภายใน 30 วัน (สำหรับแผน Free ได้ 7 วัน) การกู้คืนเขียนทับฐานข้อมูลทั้งก้อน จึงต้องได้รับอนุมัติ:
npx wrangler d1 time-travel info nvx-db --remote # ดู bookmark ปัจจุบัน
npx wrangler d1 time-travel restore nvx-db --timestamp <unix> # กู้คืน (ต้องอนุมัติ)
npx wrangler d1 export nvx-db --remote --output backup.sql # export เป็น SQL (อย่า commit ถ้ามีข้อมูลผู้ใช้)การ rollback เวอร์ชัน Worker ไม่ ย้อน schema ของ D1 ถ้า rollback ไปเวอร์ชันที่ไม่รู้จักตารางใหม่ก็ไม่เป็นไร เพราะ migration ของเราเพิ่มตารางอย่างเดียว
การเปิด R2 (ต้องให้เจ้าของบัญชีทำ)#
ผลตรวจเมื่อ 11 ต.ค. 2026: GET /accounts/<id>/r2/buckets ตอบ error 10042 "Please enable R2 through the Cloudflare Dashboard"
- เจ้าของบัญชีเปิด R2 ใน Cloudflare dashboard (R2 Object Storage) ขั้นนี้ต้องยอมรับเงื่อนไขและการคิดเงิน มี free tier แต่ส่วนเกินจะถูกเรียกเก็บ
- ให้ token ที่ใช้มีสิทธิ์ Account › Workers R2 Storage: Edit (token EXAMPLESSDK ตอนนี้สร้าง D1 ได้ แต่ยังไม่ได้ทดสอบสิทธิ์ R2)
- สร้าง bucket:
npx wrangler r2 bucket create nvx-assets - เพิ่ม binding ใน
wrangler.jsonc:"r2_buckets": [{ "binding": "ASSETS_BUCKET", "bucket_name": "nvx-assets" }]แล้วรันnpm run cf:typegenและเพิ่มASSETS_BUCKETในตาราง binding ของ config-env.md - bucket ต้อง private (ไม่เปิด public URL หรือ r2.dev) ไฟล์เสิร์ฟผ่าน Worker ที่ตรวจสิทธิ์แล้วเท่านั้น
ดูเพิ่ม#
Source: docs/operations/d1-database.md · /docs/operations/d1-database.md