“无法访问数据库服务器”尝试将 Google Cloud SQL 连接到 PostgreSQL Prisma 数据库

问题描述 投票:0回答:2

我第一次尝试在我的项目中使用 PostgreSQL 数据库和 Prisma。但是,我无法连接到我在 Google Cloud 上创建的 Cloud SQL 实例。当我运行

npx prisma db push
时,我收到错误:

Please make sure your database server is running at `34.86.23.139`:`5432`.
 ERROR  Command failed with exit code 1: prisma db push

我确保数据库服务器正在运行,并且能够使用 Cloud Shell 成功连接到它。服务器的公共IP地址是

34.86.23.139
,数据库名称是
test-db
,连接名称是
test:us-east4:test-db
。鉴于连接字符串应采用
postgresql://USER:PASSWORD@HOST:PORT/DATABASE
的形式,我在 .env:

中进行了此操作
//.env

DATABASE_URL="postgresql://[email protected]:[email protected]/test-db"
// I also tried DATABASE_URL="postgresql://[email protected]:[email protected]/test:us-east4:test-db" but same error.

这是我的 schema.prisma:

// prisma/schema.prisma

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

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

model Thing {
  id Int @id @default(autoincrement())
  name String
}

请让我知道我做错了什么。我是新手,所以请对我宽容点:) 提前谢谢你。

reactjs postgresql google-cloud-platform google-cloud-sql prisma
2个回答
1
投票

Cloud SQL 实例配置为阻止所有到公共 IP 的流量,除非您使用 授权网络特别允许某个 IP。

或者,您可以在应用程序旁边运行 Cloud SQL Auth Proxy,它将在本地主机上创建一个侦听器,将流量代理到您的实例,而无需配置授权网络。


0
投票

如果您使用 CloudSQL Auth 代理(对应于 Cloud Run 服务配置的“Cloud SQL 连接”选项),则连接必须通过 Unix 套接字。该套接字会自动在路径

/cloudsql/*connection-name*
处的服务容器中可用,其中 connection-name 是 Cloud SQL 实例的连接名称(例如:
project-id:region:instance-name
,可在概览选项卡上找到)。请参阅此快速入门指南了解更多信息。

根据 PrismaDB documentation,您需要更改

DATABASE_URL
环境变量的值以包含 Unix 套接字的路径(在这种情况下,主机必须是 localhost):
mysql://*user*:*pwd*@localhost/*database*?socket=/cloudsql/*project-id:region:instance-name*

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.