Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

prismaでマイグレーションしても、postgresで確認するとテーブルが生成されていません。

解決したいこと

私はDocker環境でNestJSプロジェクトを作成しています。
現在はDBの動作確認をしています。以前、練習のpracticeDBを作成しました。
今回は、appという別のデータベースを作成し、prismaでマイグレーションを実行しています。
ここでDBの動作確認をすると、appというDBは作成できています。設定したユーザーでログインすることもできます。ただ、テーブルが生成できていません。以前のpracticeというデータベースに作成されているようです。
appDBにテーブルを正しくマイグレーションするにはどうすればよいでしょうか?

発生している問題・エラー

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

1Answer

解決しました。
dbコンテナではなく、apiコンテナで設定した環境変数のDATABASE_URLを変更し忘れていました。

0Like

Your answer might help someone💌