資料庫應用程式的 DDL 版本控制

2020-10-10 17:00:11

目錄

什麼是 DDL?

DDL(資料定義語言):用來建立資料庫中的各種物件,例如:表、檢視、索引、同義詞、聚簇等,對應的指令為:CREATE TABLE、VIEW、INDEX、SYN、CLUSTER 等。注意,DDL 操作在 RDBMS 層面是隱性提交的,不能 Rollback,但資料庫應用程式可以顯示的執行 「刪除」 實現 Rollback 的效果。

為什麼需要 DDL 版本控制?

資料庫應用軟體的版本迭代過程中難免需要修改 ORM 的資料模型(Data Model)即 DLL,例如:新增一個表、新增一個欄位、修改一個欄位的屬性等。

然而在生產環境中,這些 DDL 操作不可以影響到現存的生成資料記錄。這裡就會出現一個需求:怎樣在保證原有生產資料完整性的情況下對資料庫進行升級,或回滾到之前的某一個時刻以復現環境,這就是需要 DLL 版本控制的緣由。

參見《Openstack_SQLAlchemy 修改資料庫的表結構》一文。

常見的 DDL 版本控制軟體

Alembic

在 Python 生態中,SQLAlchemy 是一款非常優秀的 ORM 框架,但其本身沒有提供資料庫版本控制功能。所以 SQLAlchemy 的開發者就再開發了 Alembic 這一款 Database Migration(資料遷移跟蹤記錄)軟體來彌補這一缺失。

參見《用 Flask 來寫個輕部落格 (8) — (M)VC_Alembic 管理資料庫結構的升級和降級》一文。

GORM

在 Golang 生態中,GORM 同樣是一款優秀的 ORM 框架,並且自身提供了 Migrator 的功能,包括:AutoMigrate 和 DDL 操作方法兩個層面。

參見《Go 語言程式設計 — gorm 資料庫版本遷移》一文。