Prisma错误:p1001:无法连接到数据库服务器`db.xocheossqzkirwnhzxxm.supabase.co`:`5432`。

3

我开始学习prisma和supabase,并希望在我的Next.js应用程序中实现这两种技术。运行npx prisma migrate dev --name init后,我遇到了以下错误:

Environment variables loaded from .env                                                                                                                                            
Prisma schema loaded from prisma\schema.prisma
Datasource "db": PostgreSQL database "postgres", schema "public" at "db.xocheossqzkirwnhzxxm.supabase.co:5432"

Error: P1001: Can't reach database server at `db.xocheossqzkirwnhzxxm.supabase.co`:`5432`

Please make sure your database server is running at `db.xocheossqzkirwnhzxxm.supabase.co`:`5432`.

我的数据库密码不包含任何特殊字符,这是我的schema.prisma文件:
// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

model Home{
  id        String @id @default(cuid())
  image     String?
  title     String
  description String
  price     Float
  guests    Int
  beds      Int
  baths     Int
  createdAt DateTime @default(now())
  updateAt  DateTime @updatedAt
}

这是我的.env文件:

DATABASE_URL="postgresql://postgres:[YOUR-PASSWORD]@db.xocheossqzkirwnhzxxm.supabase.co:5432/postgres"

像这样出现 无法连接 错误,意味着您的用户名和密码从未起到作用。某些原因阻止了 Prisma 通过网络访问您的 PostgreSQL 服务器。也许有防火墙挡住了它。也许 PostgreSQL 在使用不同的端口号。也许它根本没有运行。 - O. Jones
我在 Supabase 中创建了我的数据库……让我尝试关闭防火墙。 - Jacob Mutale
关闭我的防火墙没有起作用 @O.Jones - Jacob Mutale
9个回答

8
我在使用Prisma和PlanetScale(MySQL)以及Windows上的Docker(WSL)时,遇到了一个类似的问题。当我直接从终端运行或通过mysql cli连接时,并没有出现这个问题。
解决方案
我确保我的Docker Node版本与WSL上的版本相同(16.15),我注意到其他人在不同版本的Node上也遇到了这个问题,所以值得探索一下。然后,我在我的SQL URL中添加了connect_timeout=300,以防止连接过早超时。
我在Stackoverflow上的答案中提供了更多详细信息。

我遇到了完全相同的问题。加上连接超时(connection_timeout)后,仍然无法解决超时问题。如果使用cli mysql或pscale进行连接,则可以正常工作。但是,如果通过Prisma访问它,原因未知就会失败。非常奇怪,我还没有找到解决方案。似乎Prisma + PlanetScale是导致这个问题的共同因素? - athammer
使用 connect_timeout=300 成功了!请在答案中更改变量名。 - Atharv Kurdukar

1

我曾经遇到过类似的错误,我的情况是在本地计算机上运行了一个 VPN(Proton VPN)。

  • MySQL 服务器位于云中的 Ubuntu 服务器上。
  • 我还尝试使用 Planet Scale,但错误仍然存在。

我通过停止 VPN 成功解决了这个问题。


非常感谢。我在尝试使用Prisma设置Planet Scale时遇到了同样的问题,但找不到解决方法。这个解决方案解决了我的问题。 - lool

0
对于那些还没有解决这个问题的人,请尝试在Supabase上删除并重新创建项目(我曾尝试将我的密码设置为一串数字,虽然第一次不起作用,但之后,我使用与之前完全相同的方式重置了我的密码),令人惊讶的是,在网上寻找解决方案数小时后,它终于奏效了。希望你也能成功!

0
我在我的Next.js 13应用中遇到了类似的错误。我重启了服务器,并尝试了从Ubuntu终端而不是VS Code终端执行推送命令,这对我起作用了。现在,我也可以从VS Code终端使用这个命令。

0

我曾经遇到过与supabase相同的问题,后来我切换到了私人网络。当时我使用的是大学的WiFi。你可以尝试使用热点。

也许Docker是托管在公共网络上?

我不确定这是否对你有帮助,但我花了几个月的时间来解决这个问题,也许对其他人有用。


0
这是我使用的解决方案。
从 Prisma 复制 DATABASE_URL 后,您需要稍微调整连接 URL,以指向您自己的数据库。
基本上,这是格式:
mysql://USER:PASSWORD@HOST:PORT/DATABASE

DATABASE_URL="mysql://myusername:mypassword@server.us-east-2.psdb.cloud/mydb?*ssl={"rejectUnauthorized":true}*"

我不得不更改最初在我的Db_Url上写的内容,通过添加sslaccept=strict并删除之前写的内容。

因此,您的Database_Url应该像这样:DATABASE_URL="mysql://myusername:mypassword@server.us-east-2.psdb.cloud/mydb?sslaccept=strict"


0
我在与Planetscale连接的问题上遇到了完全相同的情况。尽管我多次检查了我的凭据,并确保它们与我的凭据完全相同,但Prisma似乎无法连接。

prisma error

我找到了问题的源头,我首先使用pnpm启动了我的t3应用程序,然后在部署过程中遇到一些问题后,我切换回了普通的npm并进行了安装。
当我开始使用npm时,Prisma抛出了在问题中提到的错误,但是当我切换回pnpm后,错误消失了。

prisma working example

可能错误与node_modules中的prisma客户端库生成有关,但我无法告诉你具体原因。

0
这是对我有效的解决方案。
如果您使用Supabase和Postgesql,您可以使用以下URL: postgresql://postgres:[YOUR-PASSWORD]@db.qhhlppxdlsbsaotbojei.supabase.co:5432/postgres
在密码中,请尽量只使用字符串,例如abc或defniacns。请避免在密码中使用数字。在10到15个解决方案中,这个方法对我很有效,希望对您也有用。

0
我遇到了同样的问题。问题是我尝试使用错误的密码连接,Supabase自动阻止了我的IP地址。解除封锁后,一切都正常工作了!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接