メインコンテンツにスキップ

DBマイグレーション

データベースをアップグレードする際には、古いフィールドを削除するなど、データ損失のリスクがあります。 幸いなことに、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_typeptypeに名前を変更することです。 しかし、xormはフィールド名の変更をサポートしていないため、より複雑なアプローチに頼る必要があります:p_typeの値をptypeに割り当て、その後p_typeフィールドを削除します。

IDフィールドは、実行されているマイグレーションを一意に識別します。 m.Migrate()が実行された後、IDの値はデータベースのマイグレーションテーブルに追加されます。

プロジェクトを再開すると、データベースはテーブル内の既存のIDフィールドをチェックし、同じIDに関連する操作を行わないようにします。