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

การย้ายฐานข้อมูล

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

หมายเหตุ

ดูที่ เอกสาร xorm เพื่อความเข้าใจที่ดีขึ้นเกี่ยวกับการดำเนินการโครงสร้างของ xorm

วิธีการทำงาน

ตามที่กล่าวไว้ก่อนหน้านี้ xorm ไม่สามารถจัดการการเปลี่ยนชื่อฟิลด์ได้ เพื่อจัดการกับสิ่งนี้ xorm มีแพ็คเกจ migrate ที่สามารถช่วยเหลือปัญหานี้ได้

เพื่อจัดการกับการเปลี่ยนชื่อฟิลด์ คุณสามารถเขียนโค้ดเช่นนี้:

migrations := []*migrate.Migration{
{
ID: "CasbinRule--fill ptype field with p",
Migrate: func(tx *xorm.Engine) error {
_, err := tx.Cols("ptype").Update(&xormadapter.CasbinRule{
Ptype: "p",
})
return err
},
Rollback: func(tx *xorm.Engine) error {
return tx.DropTables(&xormadapter.CasbinRule{})
},
},
}
m.Migrate()

เป้าหมายของเราคือ เปลี่ยนชื่อ p_type เป็น ptype อย่างไรก็ตาม เนื่องจาก xorm ไม่รองรับการเปลี่ยนชื่อฟิลด์ เราจึงต้องใช้วิธีที่ซับซ้อนกว่า: กำหนดค่าของ p_type ให้กับ ptype และต่อมาลบฟิลด์ p_type

ฟิลด์ ID ใช้เพื่อระบุการย้ายที่กำลังดำเนินการอย่างชัดเจน หลังจาก m.Migrate() ทำงาน ค่าของ ID จะถูกเพิ่มเข้าไปในตารางการย้ายของฐานข้อมูล

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