Torres7707

Prisma Migrate

November 5, 2024

Prisma 数据库迁移指南

数据库迁移基础

数据库迁移(Migration)是管理数据库结构变更的一种方式。它类似于代码的版本控制,可以追踪数据库架构的演变历史。

什么时候需要迁移?

只有在以下情况修改了 schema.prisma 文件时才需要迁移:

  • 添加新的数据表
  • 添加/删除字段
  • 修改字段类型
  • 添加或删除关系
  • 修改索引或约束

什么时候不需要迁移?

  • 仅进行数据的增删改查操作
  • schema 没有任何变化
  • 只修改应用代码逻辑

开发环境与生产环境

本地开发环境

在本地开发时,使用:

npx prisma migrate dev --name <migration-name>

这个命令会:

  • 创建新的迁移文件
  • 应用迁移到数据库
  • 重新生成 Prisma Client

生产环境

在生产环境中,使用:

npx prisma migrate deploy

这个命令会:

  • 应用所有待处理的迁移
  • 不会重置数据库
  • 适合生产环境使用

环境配置

本地开发配置

DATABASE_URL="postgresql://user:password@localhost:5432/dev_db"

生产环境配置

在 Vercel Dashboard 中设置环境变量:

DATABASE_URL="postgresql://user:password@production-host/prod_db"

最佳实践

1. 分离环境

  • 本地开发使用本地数据库
  • 生产环境使用生产数据库
  • 不要在开发环境直接操作生产数据库

2. 版本控制

  • 将迁移文件提交到代码仓库
  • 不要提交包含敏感信息的 .env 文件
  • 使用 .env.example 作为环境变量模板

3. 迁移管理

  • 每个迁移都应该有描述性的名称
  • 在应用迁移前先在本地测试
  • 保持迁移历史的清晰和连续

常见问题

db push vs migrate

  • prisma db push 适合:

    • 本地快速原型开发
    • 测试环境
    • 不需要追踪变更的场景
  • prisma migrate dev/deploy 适合:

    • 生产环境
    • 团队协作
    • 需要追踪变更的场景

初始化项目

新项目第一次部署时:

# 本地开发环境
npx prisma migrate dev --name init

# 生产环境
npx prisma generate && npx prisma migrate deploy

结论

合理使用数据库迁移可以:

  • 安全地管理数据库结构变更
  • 方便团队协作
  • 追踪数据库变更历史
  • 确保数据完整性

记住:只有在修改数据库结构时才需要迁移,日常的数据操作不需要迁移。