การเปลี่ยนแปลงฐานข้อมูล
เมื่อพัฒนาฟีเจอร์ใหม่ หรือปรับโครงสร้างฟีเจอร์เดิม บางครั้งก็หลีกเลี่ยงไม่ได้ที่จะต้องเปลี่ยนแปลงโครงสร้างฐานข้อมูล
ฟังดูน่ากลัวใช่ไหม? ในฐานะผู้ใช้ โดยปกติคุณต้อง:
- ตรวจสอบความแตกต่างระหว่างเวอร์ชันสองเวอร์ชันขึ้นไปอย่างละเอียด
- เปลี่ยนแปลงฐานข้อมูลอย่างปลอดภัยและเข้ากันได้กับเวอร์ชันเดิม
- เตรียมพร้อมสำหรับความล้มเหลวที่อาจเกิดขึ้น เช่น มีสคริปต์ย้อนกลับ (rollback)
- ทยอยเปลี่ยน Logto instance ที่กำลังทำงานไปยังเวอร์ชันใหม่
เฮ้ พวกเราก็เป็นนักพัฒนาเหมือนกัน และเรารู้ว่าการทำสิ่งเหล่านี้มันเสี่ยงและไม่น่าสนุกเลย แล้วทำไมไม่ให้ CLI ที่ไม่พลาดง่าย ๆ มาช่วยคุณล่ะ?
จากนี้ไป กระบวนการอัปเกรดของคุณจะเป็นดังนี้:
- รัน
logto db alt deploy
จากที่ใดก็ได้ที่เข้าถึงฐานข้อมูลได้ - ทยอยเปลี่ยน Logto instance ที่กำลังทำงานไปยังเวอร์ชันใหม่
มาเริ่มกันเลย!
กำหนดเวอร์ชันที่จะปรับใช้
หากคุณติดตั้ง Logto CLI แบบ global ขอแนะนำอย่างยิ่งให้คุณอัปเกรด CLI เป็นเวอร์ชันล่าสุดก่อนปรับใช้ เพื่อให้ได้การเปลี่ยนแปลงฐานข้อมูลที่ครบถ้วน จากนั้นรันคำสั่ง:
- CLI
- npx
logto db alteration deploy
npx @logto/cli db alteration deploy
หากฐานข้อมูลของคุณเป็นเวอร์ชันล่าสุดแล้ว คุณจะเห็นข้อความด้านล่างนี้:
[info] Found 0 alteration to deploy
หากคุณมี alteration ที่ยังไม่ได้ deploy CLI จะให้คุณเลือกเวอร์ชันที่ต้องการ:
? Choose the alteration target version (Use arrow keys)
> 1.2.0
1.0.0
ตามทฤษฎีแล้ว เวอร์ชันที่ควร deploy ควรตรงกับเวอร์ชันของ Logto instance ของคุณ ในขณะเดียวกัน คุณสามารถใช้คำสั่งพร้อมระบุเวอร์ชันเป้าหมายได้:
- CLI
- npx
logto db alteration deploy 1.2.0
npx @logto/cli db alteration deploy 1.2.0
วิธีนี้เหมาะเมื่อคุณต้องการ deploy alteration ใน pipeline ที่ไม่ใช่ TTY เพียงอย่าลืมส่ง database URL ด้วย --db-url
ดู การปรับใช้และการตั้งค่า สำหรับการตั้งค่า alteration job ในคลัสเตอร์ของคุณ
สำหรับแต่ละ alteration script, Logto CLI จะรันทั้งสคริปต์ในธุรกรรมเดียว (transaction) ดังนั้นหาก deployment ล้มเหลว คุณสามารถรันคำสั่งเดิมต่อได้หลังจากแก้ไขปัญหาแล้ว
ย้อนกลับ alteration
alteration script ของเรามีสคริปต์ down
สำหรับย้อนกลับการเปลี่ยนแปลงด้วย หากต้องการย้อนสถานะฐานข้อมูลไปยังเวอร์ชันที่ต้องการ ให้แทนที่ 1.0.0
ด้วยเวอร์ชันเป้าหมายของคุณแล้วรันคำสั่งนี้:
- CLI
- npx
logto db alteration rollback 1.0.0
npx @logto/cli db alteration rollback 1.0.0
คุณสามารถดู alteration script ทั้งหมดได้ ในไดเรกทอรีนี้
สำหรับผู้ร่วมพัฒนา
branch master ของ Logto repository อาจมี alteration script ที่ยังไม่ได้เผยแพร่ คุณอาจต้อง deploy alteration “next” ด้วยตนเองโดยรัน:
- CLI
- npx
logto db alteration deploy next
npx @logto/cli db alteration deploy next
หากคุณกำลังพัฒนาฟีเจอร์ที่ต้องเปลี่ยนแปลงฐานข้อมูล นอกจากจะอัปเดต schema แล้ว คุณต้องเตรียมสคริปต์ในรูปแบบต่อไปนี้ด้วย:
next-[timestamp]-what-to-do.ts
ดูตัวอย่างได้ที่ ไดเรกทอรีนี้