>
既にデータベースが存在する場合に、データを失うことなくPrismaでmigrateする方法について説明します。
1データベースの定義からスキーマを作成します。
npx prisma db pull
prisma\schema.prismaにスキーマが作成されます。
2prisma\schema.prismaを編集します。
// 修正前
model posts {
id Int @id @default(autoincrement())
title String
content String
status String
user_id String
created_at DateTime @default(now())
updated_at DateTime @default(now())
}
// 修正後
model Post {
id Int @id @default(autoincrement())
title String
content String
status String
userId String @map("user_id")
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @default(now()) @map("updated_at")
@@map("posts")
}
3通常通り "npx prisma migrate dev --name init" を実行すると(ここでは実行する必要はありません)、「続けますか?全てのデータを失います」という恐ろしいメッセージが表示されます。 "n" を入力してキャンセルします。
Drift detected: Your database schema is not in sync with your migration history. The following is a summary of the differences between the expected database schema given your migrations files, and the actual schema of the database. It should be understood as the set of changes to get from the expected schema to the actual schema. If you are running this the first time on an existing database, please make sure to read this documentation page: https://www.prisma.io/docs/guides/database/developing-with-prisma-migrate/troubleshooting-development [+] Added tables - posts - users √ We need to reset the "public" schema at "aws-0-ap-northeast-1.pooler.supabase.com:5432" Do you want to continue? All data will be lost. ... no
ここからは、以下の公式ドキュメントの内容の通りに操作します。
Baselining a database | Prisma Documentation
prisma/migrationsフォルダがあれば削除します(migrateしていなければ、ないはずです)。データベースにprisma_migrationsテーブルがあれば削除します(migrateしていなければ、ないはずです)。
5マイグレーション用のディレクトリを作成します。
mkdir -p prisma/migrations/0_init
5マイグレーションを作成します。
npx prisma migrate diff --from-empty --to-schema-datamodel prisma/schema.prisma --script > prisma/migrations/0_init/migration.sql
6無視する必要があるマイグレーションを無視するため、以下のようにコマンドを実行します。
npx prisma migrate resolve --applied 0_init
VSCodeの場合、上記の[6]のコマンドの実行時にエラーが発生します。
これはVSCodeのPowerShellのエンコーディングの問題だそうです。以下の操作をした後に、[6]のコマンドを再度実行してください。
1. prisma\migrations\0_init\migration.sqlを開く。
2. Ctrl+Shirt+P > Change File Encoding > Save with encoding > windows1252
参考ページ: next.js - Error: P3017 When I run npx prisma command - Stack Overflow
これで、データベースとの同期が完了しました。
1schema.prismaに新しいモデルを追加し、migrateします。
model Category {
id Int @id @default(autoincrement())
name String
slug String
@@map("categories")
}
npx prisma migrate dev --name add_categories_to_posts
2データベースに新しいカラムが追加されていることを確認します。
今回の記事は、自分用のメモとしてまとめました。ネットで情報を共有してくださっている先輩方に感謝。Prismaで複数のデータベースを扱う方法についても、そのうち記事にまとめます。