開源動畫協同製作平臺cgwire的資料遷移

cgwire作為開源軟體,目前還處於快速更新迭代的階段。github上面的程式碼倉庫顯示,12月3號還merge了一個PR。所以如果之前使用了老版本的zou(這個是cgwire的後臺服務),那麼你如果想拉取並使用最新的程式碼的話,你就要實現資料的平滑遷移了。幸運的是,cgwire也考慮了資料遷移的問題,並提供了相應的方法。下面我給大家詳細演示下如何操作。

cgwire資料庫遷移技術實現:

資料庫:

postgres

ORM框架:

SQLAlchemy

遷移的解決方案是基於flask migrate

場景:

在遷移開始之前我們當前的狀態是:

首先使用的是比較低的一個版本的zou

而且資料庫中已經有業務資料了

我們對cgwire做了一些定製開發,修改過資料庫的表結構。

遷移步驟

備份已有資料庫(好習慣要養成)

進入postgres資料庫的容器,執行下面的命令,備份postgres資料庫

pg_dumpall -U postgres > backup_file

2。進入postgres容器,然後執行下面的命令

1。執行

psql -U

進入postgres命令列

2。

\c zoudb

切換資料庫到zoudb

2。

delete from alembic_version

將alembic_version表清空

原因:因為我們之前修改過資料庫,每次修改alembic_version裡面就會相應記錄修改的版本。如果alembic_version裡面的版本沒有和migrations檔案下的匹配,就會報錯。

開源動畫協同製作平臺cgwire的資料遷移

開源動畫協同製作平臺cgwire的資料遷移

3。執行

zou stamp-db

原因:將資料庫的修改版本設定成當前migrations中的最新的修改號,否則在進行zou migrate-db的時候會報相應的錯誤。

開源動畫協同製作平臺cgwire的資料遷移

開源動畫協同製作平臺cgwire的資料遷移

4。zou migrate-db 生成遷移指令碼

5。修改指令碼 ,新增列舉型別STATUSES和VALIDATION_STATUSES,然後修改相應的字端

vi /opt/zou/env/lib/python3。8/site-packages/zou/migrations/versions/0e8c575b2151_。py

STATUSES = [ (“processing”, “Processing”), (“ready”, “Ready”), (“broken”, “Broken”),]VALIDATION_STATUSES = [ (“validated”, “Validated”), (“rejected”, “Rejected”), (“neutral”, “Neutral”),]

開源動畫協同製作平臺cgwire的資料遷移

6。儲存退出,執行zou upgrade-db,完成結構遷移。

總結:

這種遷移方法,還有個漏洞就是,如果新的程式碼裡面增加了字端,這些字端有是有新的邏輯生成的。而我們老的資料裡面沒有這些資料,就需要我們瞭解改動,並透過sql或是指令碼與程式進行backfill了。今天就到這裡,謝謝觀看