发布于 2026-01-06 11 阅读
0

在 Supabase 上设置一个免费的 PostgreSQL 数据库,以便与 Prisma 一起使用。

在 Supabase 上设置一个免费的 PostgreSQL 数据库,以便与 Prisma 一起使用。

Supabase是一个基于开源技术构建的后端即服务 (BaaS) 平台。它提供数据库、身份验证、REST API、实时订阅和存储等功能。

它提供包含托管 PostgreSQL 数据库的免费套餐。如果您刚开始一个新项目,这会很有用。

本指南介绍如何快速将 Supabase 提供的 Postgres 数据库连接到 Prisma 项目。此外,还有其他服务提供托管的 PostgreSQL 数据库,例如HerokuDigital Ocean

Prisma是一个开源的下一代 ORM(对象关系映射)。它由以下几个部分组成:

  • Prisma Client:适用于 Node.js 和 TypeScript 的自动生成且类型安全的查询构建器。
  • Prisma Migrate:迁移系统。
  • Prisma Studio:用于查看和编辑数据库中数据的图形用户界面。

步骤 1:登录 Supabase

请在浏览器中访问https://app.supabase.com并使用 GitHub 登录。

登录界面

步骤二:创建新项目

你会发现,系统已经为你创建了一个组织,其用户名与你登录时使用的 GitHub 用户名相同。

点击“新建项目”创建新项目,然后选择组织。

创建一个新项目

接下来,您需要为数据库提供名称并设置密码(稍后会用到)。最后,点击“创建新项目”

设置项目名称和数据库密码

项目创建完成后,您需要等待约 2 分钟,Supabase 才能完成数据库创建。

步骤 3:从项目设置中获取连接字符串

从侧边栏进入设置页面,然后导航至“数据库”选项卡。您将找到数据库连接字符串,其中包含您创建项目时提供的密码占位符。

获取连接字符串

步骤 4:测试连接

为了确保一切正常运行,让我们在 Prisma 项目中测试一下连接字符串。

如果你已经有了连接,你只需要将DATABASE_URL连接字符串(包括密码)设置到你的.env文件中,就可以使用了。

如果您没有 Prisma 项目,或者这是您第一次使用 Prisma,您将使用快速入门指南中的仓库。

克隆起始项目

进入你选择的目录,如果你使用的是 Windows 系统,请在终端中运行以下命令:



curl https://pris.ly/quickstart -L -o quickstart-master.tar.gz && tar -zxvf quickstart-master.tar.gz quickstart-master/typescript/starter && move quickstart-master\typescript\starter starter && rmdir /S /Q quickstart-master && del /Q quickstart-master.tar.gz


Enter fullscreen mode Exit fullscreen mode

如果您使用的是 Mac OS 或 Linux 系统,请运行以下命令:



curl -L https://pris.ly/quickstart | tar -xz --strip=2 quickstart-master/typescript/starter


Enter fullscreen mode Exit fullscreen mode

现在您可以进入该目录并安装项目的依赖项:



cd starter && npm install


Enter fullscreen mode Exit fullscreen mode

项目结构概览

该项目已配置好 TypeScript,结构如下。

  • 包含以下内容的目录prisma
    • 文件dev.db:这是一个 SQLite 数据库。
    • 文件schema.prisma:用于定义不同的数据库模型以及它们之间的关系。
  • 文件.env:包含DATABASE_URLPrisma 将使用的变量。
  • 一个script.ts文件:我们将使用 Prisma Client 在其中运行一些查询。

此启动器还预装了以下软件包:

  • @prisma/client:一个根据您的数据量身定制的自动生成且类型安全的查询构建器。
  • prismaPrisma 的命令行界面 (CLI) 允许您初始化新的项目资源、生成 Prisma 客户端,并通过内省分析现有数据库结构,从而自动创建应用程序模型。

注意:Prisma 同时支持 JavaScript 和 TypeScript。但是,为了获得最佳的开发体验,强烈建议使用 TypeScript。

配置项目以使用 PostgreSQL

请删除该prisma/dev.db文件,因为我们将切换到 PostgreSQL。

接下来,在prisma/.env文件中,将变量的值更新为你在步骤 3DATABASE_URL中获取的连接字符串。URL 可能如下所示:



# prisma/.env

postgres://postgres:[YOUR-PASSWORD]@db.vdbnhqozmlzdsaejdxwr.supabase.co:5432/postgres



Enter fullscreen mode Exit fullscreen mode

最后,在你的schema.prisma文件中,将provider“sqlite”更改为"postgresql"

schema.prisma你的文件应该看起来像这样:



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

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

model Post {
  id        Int     @id @default(autoincrement())
  title     String
  content   String?
  published Boolean @default(false)
  author    User?   @relation(fields: [authorId], references: [id])
  authorId  Int?
}

model User {
  id    Int     @id @default(autoincrement())
  email String  @unique
  name  String?
  posts Post[]
}


Enter fullscreen mode Exit fullscreen mode

为了测试一切是否正常运行,请运行以下命令创建迁移:



prisma migrate dev --name init


Enter fullscreen mode Exit fullscreen mode

您可以根据所做的更改,选择性地为迁移命名。由于这是项目的第一个迁移,因此您将标志设置--name为“init”。

如果一切正常,您应该在终端中看到以下消息:



Your database is now in sync with your schema.

✔ Generated Prisma Client (2.x.x) to ./node_modules/@prisma/client in 111ms


Enter fullscreen mode Exit fullscreen mode

这将prisma/migrations在您的prisma目录中创建一个文件夹,并将您的 Prisma 架构与您的数据库架构同步。

注意:如果您想跳过创建迁移历史记录的过程,可以使用该db push命令代替migrate dev

如果你进入你的 Supabase 项目,在表格编辑器中,你应该会看到已经创建了两个表格,一个是表格,另一个PostUser表格。

在用户界面中创建的表格

搞定!您已成功将 Prisma 项目连接到托管在 Supabase 上的 PostgreSQL 数据库,并运行了第一次迁移。

使用 Supabase 进行连接池

如果你在无服务器环境中工作(例如托管在 AWS Lambda、Vercel 或 Netlify Functions 上的 Node.js 函数),你需要使用像PgBouncer这样的工具来设置连接池。这是因为每次函数调用都可能导致与数据库建立新的连接

幸运的是,Supabase 项目支持使用 PgBouncer 进行连接管理,并且默认情况下已启用。

从侧边栏转到“数据库”页面,然后导航到“连接池设置” 。

连接池设置

运行迁移时,您需要使用非连接池连接 URL(例如我们在步骤 4中使用的那个)。但是,部署应用程序时,您需要使用连接池连接 URL,并?pgbouncer=true在 PostgreSQL 连接 URL 中添加相应的标志。URL 可能如下所示:



# prisma/.env

postgres://postgres:[YOUR-PASSWORD]@db.vdbnhqozmlzdsaejdxwr.supabase.co:6543/postgres?pgbouncer=true



Enter fullscreen mode Exit fullscreen mode

Prisma Migrate 使用数据库事务来检查数据库和迁移表的当前状态。但是,迁移引擎设计为使用单个数据库连接,不支持与 PgBouncer 进行连接池协作。如果您尝试在任何使用 PgBouncer 进行连接池协作的环境中运行 Prisma Migrate 命令,则可能会看到以下错误:



Error: undefined: Database error
Error querying the database: db error: ERROR: prepared statement "s0" already exists


Enter fullscreen mode Exit fullscreen mode

这是一个已知问题,目前正在处理中,您可以在此GitHub 问题中关注进展

如果您想了解更多关于 Supabase 的信息,请查看文档

如果您想了解更多关于 Prisma 的信息,请查看文档。此外,如果您有任何疑问或遇到任何问题,欢迎在仓库的讨论区发起讨论。

文章来源:https://dev.to/prisma/set-up-a-free-postgresql-database-on-supabase-to-use-with-prisma-3pk6