【Prisma】prisma migrate でエラーが出るので解決していく

PostgreSQL

 

prisma migrateを実行したのですが、いくつかエラーが出ました。

対応した記録を記事として残しておきます。

同じような状況になっている方の参考になればうれしいです

 

現状

 

Next.jsのアプリにPrismaをインストールし、PostgreSQLのDockerコンテナに接続します

 

 

バージョン

 

バージョン
Prisma 5.2.0
Node.js 18.17.0
Next.js 13.4.19
Docker 20.10.21
PostgreSQL 15.4

 

エラー①:Prisma Migrate could not create the shadow database.

エラー文

 

 

db error: ERROR: permission denied to create database

と出ているので、Database を作成する権限が足りてないようですね。

 

でも、その権限ってなんで必要なんでしょう??

 

CREATEDBの権限が必要な理由

 

エラー文の中にある↓のサイトを見てみます

About the shadow database | Prisma Documentation
About the shadow database

 

シャドウデータベースを作成するためにCREATEDBが必要とのことです。

シャドウデータベースとは…
マイグレーション時に作成されるデータベースのこと。
   
Prismaスキーマ(schema.prisma)と実際のDBの状態が一致しているか確認し、
 一致 :DBにマイグレーションを実行
 不一致:マイグレーションを停止、手動でDBに変更が加えられた場合などが該当
     DBからPrismaスキーマへpullしてからマイグレーションする必要あり?

 

必要な権限について確認したい方は↓を見てみてください

About the shadow database | Prisma Documentation
About the shadow database

 

CREATEDBの権限を付与する

 

PostgreSQLにログインして、Prismaが使用するユーザーに権限を付与します。

私の場合は、PrismaがPostgreSQLで使用するのは

  • USER:prismauser
  • DB:prismadb

なので、下記のようにコマンドを実行しました。

 

 

権限が付与されたので、再度prisma migrateしてみます

 

エラー②:no schema has been selected to create in

エラー文

 

 

エラー文でいろいろ調べてみると、スキーマに対するUSAGEの権限がないことが原因っぽい

USAGE:対象がスキーマの場合、それに含まれるオブジェクトへのアクセスを許可

の権限になります

 

USAGEをユーザーへ付与

 

こちらもPrismaが使用するユーザーへ権限を付与していきます。

 

私の場合は、PrismaがPostgreSQLで使用するのは

  • USER:prismauser
  • DB:prismadb
  • SCHEMA:prismaschema

なので、下記のようにコマンドを実行しました。

 

 

解決しました

 

再度、prisma migrateしてみます

 

無事通りましたーー

 

参考文献

エラー①:Prisma Migrate could not create the shadow database.

 

CREATE ROLE
CREATE ROLE CREATE ROLE — define a new database role Synopsis CREATE ROLE name option [ …
【初心者向け】PostgreSQLのロールについて分かり易く解説
PostgreSQLで複数のユーザーやグループがデータベースを利用するにあたり、そのアクセス権限を取り決めて設定する必要がある。その際に設定するロールというものについて紹介する
PostgreSQLのロール - Qiita
はじめにみなさんこんにちは。NTTテクノクロス 原田です(いつもはぬこ@横浜名義でQiitaに書いてますが・・・)。これはNTTテクノクロス Advent Calendar 2018の4日目の記…

 

エラー②:no schema has been selected to create in

 

GRANT
PostgreSQLの権限と権限設定コマンド - Qiita
【権限には大きく2つに分類される】DBユーザ単位の権限テーブル単位の権限(SQLコマンドのみ設定可)【権限を設定できるコマンドは大きく2種類ある】PostgreSQL標準のコマンド(接続後処…
ロールにテーブルやビューなどに対する権限を追加する(GRANT)
GRANT コマンドを使ってロールに対して権限を追加することができます。権限はテーブルやスキーマの作成する権限や、テーブルやカラムからデータを取得したりデータを追加する権限などです。ここでは PostgreSQL で GANT コマンドを使って権限を追加する方法について解説します。

 

コメント

タイトルとURLをコピーしました