Paaaack 的 Database Schema Migration 在 2019 年開始的時候是用 node-db-migrate 寫的,基本上運作流程單純好實作:
- 要 Migrate 時用指令產生一份 upgrade 跟 downgrade 的 .sql
- 手寫 upgrade/downgrade SQL
- 執行 migration
最近則因為導入了 ORM tool Prisma,發現他有提供更好用的 Schema Migration 流程 Prisma Migrate,所以就決定換過去了,整個 Migration 的流程調整為如下:
Prerequisite
先成功導入 Prisma:Integrating Prisma as an ORM for the Node.js and PostgreSQL-based API Server | Paaaack
Migration Flow (Docker Compose based)
1. [local] One time initialization
成功跑完後 DB 裡就會產生 _prisma_migrations
的 table。
mkdir -p prisma/migrations/0_init
docker-compose exec [app] npx prisma migrate diff \
--from-empty \
--to-schema-datamodel prisma/schema.prisma \
--script > prisma/migrations/0_init/migration.sql
docker-compose exec [app] npx prisma migrate resolve --applied 0_init
2. [local] Update schema.prisma
3–1. [local]
如果沒有需要加上 custom SQL 的話:
Run docker-compose exec [app] npx prisma migrate dev
之後 Prisma 就會自動看 schema 的變化產生對應的 migration.sql
如果要加入 custom SQL 的話則是:
Run docker-compose exec [app] npx prisma migrate --create-only
加入 custom SQL
Run docker-compose exec [app] npx prisma migrate dev
3–2. [local]
Run docker-compose exec [app] npx prisma generate
4. [production]
在 local 確認都沒問題後就可以在 production 上 apply:
Run docker-compose exec [app] npx prisma migrate deploy
Run docker-compose exec [app] npx prisma generate