Open1

a5SQLで生成したDDLを、Prismaが受け付けてくれなかった話

begginerbegginer

未だ理解しきれていないので、間違ったことをたくさん書いていると思います。

状況

  • Dockerコンテナ上で、PostgresSQLを起動できている状態
    • DDLは当然読み込まれる
      • DDLはa5SQLを利用してER図からリバース生成したものを使用
    • initのinsert文も読み込まれる
  • Next.jsのサーバサイドにてAPI実装をする準備として、ORMのPrismaをDBと接続できるようにしたい
    • DBへの接続はできた
    • ただ、何かDocker上の初期データが既存されるぞ、、、

試したこと

  • まずはPrismaをインストール
  • 次に、schema.prismaを作成
    • (a5SQLからリバース生成したERもとに、ChatGPTに作ってもらったけど、もっといい方法あれば教えてください。みんなこれ手作業で作ってるのか、、?)
  • 次になにやら最初に打つらしいコマンドを実行
    • ちゃんと理解したら追記します
    • これを実行すると、既存のデータが消される
 ./sql/*.sql /docker-entrypoint-initdb.d/

原因

  • 調べた感じでは、schema.prismaを基にコンテナで起動しているDBに対してのマッピングが実行される。
    • この時に、Prisma側でinit.sqlが生成される(DDL)
    • ただschema.prismaの情報と、DBの情報が合致しないとPrismaは既存のデータ消すよ?って言ってくる。ここでNoすると何も進まないので消すしかなかった。。

対応策

  • Prismaが作成したDDLを、DockerImageをビルドする際にinitで読み込むDDLとすることで対応
    • つまりa5SQLで作成したDDLではなく仕方が無いからPrismaに合わせたDDLを使用
    • まぁ実現したい要件はどちらでも満たせるのでよいかなと。

残気になるポイント

  • a5SQLからDDL作成を色々試したけど、どうもPrismaが求めている形式では出力できなかった。
    • ツールとしての互換性がないか?私がミスってるのか?
  • Prismaについてまだあんま理解できてない