数据库 Migration
记录一下最近开发项目时,使用 typeorm + postgresql 开发业务,用版本化的方式来管理数据库结构的变化,这样数据进行更新时才会安全可控,而且还可以回滚迁移。
typeorm 是如何跟踪这些变化的呢,所有的变动都能通过 migrate 的方式记录下来,主要是依赖数据库自身底层的机制,尤其是二进制日志,即 Binary Log,简称 binlog
记录结构变更(DDL): 当执行 CREATE TABLE
、ALTER TABLE
、DROP TABLE
等数据定义语言(DDL)语句时,都会被 binlog 详细记录下来
记录数据变更(DML): 当执行 INSERT
、UPDATE
、DELETE
等数据操作语言(DML)语句时,binlog 也会记录修改前和修改后的数据
我使用 typeorm 来执行这些 migrate,主要有以下几个命令:
"migration:create": "npm run typeorm migration:create"
创建数据库迁移文件
"migration:generate": "npm run typeorm migration:generate -d src/config/database.config.ts"
用于自动生成迁移文件,并生成相应的 SQL 语句
"migration:run": "npm run typeorm migration:run -d src/config/database.config.ts"
用来运行所有没执行的迁移动作,将数据库更新到最新的 Schema 版本
"migration:revert": "npm run typeorm migration:revert -d src/config/database.config.ts"
回退到之前的 Schema,撤销最近一次的数据库变更,类似 git revert 的功能