ข้ามไปยังเนื้อหาหลัก

การเปลี่ยนแปลงฐานข้อมูล

เมื่อพัฒนาฟีเจอร์ใหม่ หรือปรับโครงสร้างฟีเจอร์เดิม บางครั้งก็หลีกเลี่ยงไม่ได้ที่จะต้องเปลี่ยนแปลงโครงสร้างฐานข้อมูล

ฟังดูน่ากลัวใช่ไหม? ในฐานะผู้ใช้ โดยปกติคุณต้อง:

  • ตรวจสอบความแตกต่างระหว่างเวอร์ชันสองเวอร์ชันขึ้นไปอย่างละเอียด
  • เปลี่ยนแปลงฐานข้อมูลอย่างปลอดภัยและเข้ากันได้กับเวอร์ชันเดิม
  • เตรียมพร้อมสำหรับความล้มเหลวที่อาจเกิดขึ้น เช่น มีสคริปต์ย้อนกลับ (rollback)
  • ทยอยเปลี่ยน Logto instance ที่กำลังทำงานไปยังเวอร์ชันใหม่

เฮ้ พวกเราก็เป็นนักพัฒนาเหมือนกัน และเรารู้ว่าการทำสิ่งเหล่านี้มันเสี่ยงและไม่น่าสนุกเลย แล้วทำไมไม่ให้ CLI ที่ไม่พลาดง่าย ๆ มาช่วยคุณล่ะ?

จากนี้ไป กระบวนการอัปเกรดของคุณจะเป็นดังนี้:

  • รัน logto db alt deploy จากที่ใดก็ได้ที่เข้าถึงฐานข้อมูลได้
  • ทยอยเปลี่ยน Logto instance ที่กำลังทำงานไปยังเวอร์ชันใหม่

มาเริ่มกันเลย!

กำหนดเวอร์ชันที่จะปรับใช้

หากคุณติดตั้ง Logto CLI แบบ global ขอแนะนำอย่างยิ่งให้คุณอัปเกรด CLI เป็นเวอร์ชันล่าสุดก่อนปรับใช้ เพื่อให้ได้การเปลี่ยนแปลงฐานข้อมูลที่ครบถ้วน จากนั้นรันคำสั่ง:

logto 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 ของคุณ ในขณะเดียวกัน คุณสามารถใช้คำสั่งพร้อมระบุเวอร์ชันเป้าหมายได้:

logto 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 ด้วยเวอร์ชันเป้าหมายของคุณแล้วรันคำสั่งนี้:

logto db alteration rollback 1.0.0
บันทึก:

คุณสามารถดู alteration script ทั้งหมดได้ ในไดเรกทอรีนี้

สำหรับผู้ร่วมพัฒนา

branch master ของ Logto repository อาจมี alteration script ที่ยังไม่ได้เผยแพร่ คุณอาจต้อง deploy alteration “next” ด้วยตนเองโดยรัน:

logto db alteration deploy next

หากคุณกำลังพัฒนาฟีเจอร์ที่ต้องเปลี่ยนแปลงฐานข้อมูล นอกจากจะอัปเดต schema แล้ว คุณต้องเตรียมสคริปต์ในรูปแบบต่อไปนี้ด้วย:

next-[timestamp]-what-to-do.ts

ดูตัวอย่างได้ที่ ไดเรกทอรีนี้