跳至主要内容

Supabase

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

什么是 Supabase?

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

要了解更多关于 Supabase 的信息,您可以在此处查看其架构,并在此处查看其功能。

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

将 Prisma ORM 与 Supabase 结合使用的许多方面,都与将 Prisma ORM 与任何其他关系数据库结合使用一样。您仍然可以:

具体注意事项

如果您想使用 Supabase 提供的连接池功能,您需要使用通过您的Supabase 数据库设置可用的连接池连接字符串,并在 Prisma Client 使用驱动程序适配器实例化时读取的环境变量末尾添加 ?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"

Supabase 为每个数据库提供三种类型的连接字符串:

  1. 直接数据库连接字符串postgresql://postgres:password@db.[your-project-ref].supabase.co:5432/postgres

  2. 事务池连接字符串postgresql://postgres.[your-project-ref]:password@aws-0-[region].pooler.supabase.com:6543/postgres

  3. 会话池连接字符串postgresql://postgres.[your-project-ref]:password@aws-0-[region].pooler.supabase.com:5432/postgres

Prisma CLI 命令(例如迁移和内省)现在从 prisma.config.ts 读取直接的、非池化连接字符串。配置两个环境变量——用于 Prisma Client 的池化连接字符串(DATABASE_URL)和用于 Prisma CLI 的直接连接字符串(DIRECT_URL

.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 by the Prisma CLI.
DIRECT_URL="postgres://postgres.[your-supabase-project]:[password]@aws-0-[aws-region].pooler.supabase.com:5432/postgres"
# or
DIRECT_URL="postgresql://postgres:password@db.[your-project-ref].supabase.co:5432/postgres"

prisma.config.ts 指向直接连接字符串

prisma.config.ts
import 'dotenv/config'
import { defineConfig, env } from 'prisma/config'

export default defineConfig({
schema: 'prisma/schema.prisma',
datasource: {
url: env('DIRECT_URL'),
},
})

在运行时,使用带有池化 DATABASE_URL 的驱动程序适配器实例化 Prisma Client。这使直接连接字符串作用域限制在 Prisma CLI 工作流中,而您的应用程序连接则继续通过 Supavisor 流动。

src/db/client.ts
import { PrismaClient } from '../prisma/generated/client'
import { PrismaPg } from '@prisma/adapter-pg'

const adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL })
export const prisma = new PrismaClient({ adapter })
信息

我们强烈建议除了 DIRECT_URL 之外,还使用 Supavisor 进行连接池。您将获得 Prisma CLI 卓越的开发体验,同时无论您的部署策略如何,都允许连接池化。虽然这对于每个应用程序来说并非严格必要,但无服务器解决方案将不可避免地需要连接池。

Supabase 入门

如果您有兴趣了解更多信息,Supabase 有一个很棒的指南,介绍如何将 Supabase 提供的数据库连接到您的 Prisma 项目,请访问此处

如果您在与 Supabase 集成时遇到问题,请查看这些特定的故障排除提示Prisma 的 GitHub 讨论以获取更多帮助。

© . This site is unofficial and not affiliated with Prisma Data, Inc.