跳到主要内容

Supabase

本指南讨论了使用 Prisma ORM 和 Supabase 背后的概念,解释了 Supabase 与其他数据库提供商之间的共同点和差异,并引导你完成配置应用程序以集成 Supabase 的过程。

什么是 Supabase?

Supabase 是一个 PostgreSQL 托管服务和开源的 Firebase 替代品,提供了构建产品所需的所有后端功能。与 Firebase 不同,Supabase 由 PostgreSQL 支持,可以使用 Prisma ORM 直接访问。

要了解更多关于 Supabase 的信息,你可以查看他们的架构 这里 和功能 这里

与其他数据库提供商的共同点

使用 Prisma ORM 和 Supabase 的许多方面就像使用 Prisma ORM 和任何其他关系型数据库一样。你仍然可以

  • 使用 Prisma Schema Language 对你的数据库进行建模
  • 在你的 schema 中使用 Prisma ORM 现有的 postgresql 数据库连接器,以及 Supabase 提供给你的 连接字符串
  • 如果你已经在 Supabase 中拥有数据库 schema,则对现有项目使用内省
  • 使用 db push 将你的 schema 中的更改推送到 Supabase
  • 在你的应用程序中使用 Prisma Client 与 Supabase 的数据库服务器通信

特殊注意事项

如果你想使用 Supabase 提供的 连接池功能,你需要使用通过你的 Supabase 数据库设置 获得的连接池连接字符串,并在你的 DATABASE_URL 环境变量末尾添加 ?pgbouncer=true

.env
# Connect to Supabase via connection pooling with Supavisor.
DATABASE_URL="postgres://postgres.[your-supabase-project]:[password]@aws-0-[aws-region].pooler.supabase.com:6543/postgres?pgbouncer=true"

如果你想使用 Prisma CLI 来执行数据库上的其他操作(例如,迁移),你将需要添加一个 DIRECT_URL 环境变量,在 datasource.directUrl 属性中使用,以便 CLI 可以绕过 Supavisor

.env
# Connect to Supabase via connection pooling with Supavisor.
DATABASE_URL="postgres://postgres.[your-supabase-project]:[password]@aws-0-[aws-region].pooler.supabase.com:6543/postgres?pgbouncer=true"

# Direct connection to the database. Used for migrations.
DIRECT_URL="postgres://postgres.[your-supabase-project]:[password]@aws-0-[aws-region].pooler.supabase.com:5432/postgres"

然后你可以更新你的 schema.prisma 以使用新的直接 URL

schema.prisma
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
directUrl = env("DIRECT_URL")
}

关于 directUrl 字段的更多信息可以在 这里 找到。

信息

我们强烈建议除了 DIRECT_URL 之外,还使用 Supavisor 的连接池。你将获得 Prisma CLI 的出色开发者体验,同时允许连接被池化,而无需考虑你的部署策略。虽然这对于每个应用来说不是绝对必要的,但无服务器解决方案将不可避免地需要连接池。

Supabase 入门

如果你有兴趣了解更多信息,Supabase 提供了一个很棒的指南,用于将 Supabase 提供的数据库连接到你的 Prisma 项目,点击这里 查看。

如果你在集成 Supabase 时遇到问题,请查看这些 特定的故障排除技巧Prisma 的 GitHub Discussions 以获得更多帮助。