Switching PostgreSQL Database Schema Migration from node-db-migrate to Prisma Migrate | Paaaack

Yes Lee
4 min readJul 30, 2024

--

Paaaack 的 Database Schema Migration 在 2019 年開始的時候是用 node-db-migrate 寫的,基本上運作流程單純好實作:

  1. 要 Migrate 時用指令產生一份 upgrade 跟 downgrade 的 .sql
  2. 手寫 upgrade/downgrade SQL
  3. 執行 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

https://www.prisma.io/docs/orm/prisma-migrate/understanding-prisma-migrate/mental-model

--

--