はじめに
Next.jsでPrismaを使ってPostgreSQLに接続する際にハマったポイントと、その解決法について紹介します。
環境
- Next.js v14
- Prisma 5.16.0
- PostgreSQL
問題の概要
以下の通り、Prismaを使ってPostgreSQLに接続しようとしたところ、接続エラーが発生してしました。
schema.prisma
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
// その他のスキーマ定義...
.env
DATABASE_URL='postgresql://postgres.*******:P@ssword@aws-0-ap-northeast-1.***.***:****/***'
エラーメッセージ
PS C:\Users\USER\Dev\*****\*****> npx prisma db push
Environment variables loaded from .env
Prisma schema loaded from prisma\schema.prisma
Datasource "db": PostgreSQL database "postgres", schema "public" at "*****.********.***:****"
Error: P1001: Can't reach database server at `*****.********.***:****`
Please make sure your database server is running at `*****.********.***:****`.
対処
エラーコードをGithub Copilotに投げる
指示に従って設定を確認するも効果なし
パスワードを変更したら治った<<なぜ?
今回の原因と解決方法
今回の問題は、パスワードに@
が含まれていたために発生しました。この場合、接続文字列が正しく解析されずにエラーが起こります。
URLエンコードでこの問題を解決しようとしましたが@
のエンコード値である%25
はそのまま認識されてしまうので、この問題をURLエンコードで解決することはできません。
唯一の解決策(多分)は、データベースのパスワードを変更することです。