prismaでマイグレーションしても、postgresで確認するとテーブルが生成されていません。
Q&A
Closed
解決したいこと
私はDocker環境でNestJSプロジェクトを作成しています。
現在はDBの動作確認をしています。以前、練習のpractice
DBを作成しました。
今回は、app
という別のデータベースを作成し、prismaでマイグレーションを実行しています。
ここでDBの動作確認をすると、app
というDBは作成できています。設定したユーザーでログインすることもできます。ただ、テーブルが生成できていません。以前のpractice
というデータベースに作成されているようです。
app
DBにテーブルを正しくマイグレーションするにはどうすればよいでしょうか?
発生している問題・エラー
postgresで、テーブルを確認時。
app=# \dt
Did not find any relations.
nestjsプロジェクトのあるapiコンテナで、マイグレーションを実行時。
api # npx prisma migrate dev --name regenerate
Environment variables loaded from .env
Prisma schema loaded from prisma/schema.prisma
Datasource "db": PostgreSQL database **"practice"**, schema "public" at "db:5432"
Already in sync, no schema change or pending migration was found.
✔ Generated Prisma Client (v5.15.0) to ./node_modules/@prisma/client in 79ms
該当するソースコード
.envファイルです。
~
// PASSWORDは正しく設定しています。
DATABASE_URL=postgresql://postgres:PASSWORD@db:5432/app?schema=public
~
schema.prismaファイルです。
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
// URLのパスです。
url = env("DATABASE_URL")
}
model User {
id Int @default(autoincrement()) @id
email String @unique
name String?
posts Post[]
}
~
compose.ymlファイルです。
// PASSWORDは正しく設定しています。
~
db:
build:
context: .
dockerfile: docker/db/Dockerfile
// 環境変数です。
environment:
POSTGRES_USER: "postgres"
POSTGRES_PASSWORD: "PASSWORD"
POSTGRES_DB: "app"
// もう一方のDockerコンテナでは、`ports: - 5432:5432`を設定しています。
ports:
- 5433:5432
volumes:
- ./.data/db:/var/lib/postgresql/data
- ./docker/db/init-scrips:/docker-entrypoint-initdb.d
~
自分で試したこと
.envファイルの再読み込み
docker compose down
docker compose up -d
スキーマのキャッシュを削除・再生成
rm -rf node_modules/@prisma/client
npx prisma generate
マイグレーションのリセット
npx prisma migrate reset
npx prisma migrate dev --name init
唯一生成したpublicスキーマにあるテーブルを確認したところ、userテーブルは見つかりませんでした。
app=# \dn
List of schemas
Name | Owner
--------+----------
public | postgres
(1 row)
app=# SELECT table_name FROM information_schema.tables WHERE table_schema = 'public';
table_name
------------
(0 rows)
生成されたバインドマントのファイル群を削除し再生成しています。
0