Prisma
本指南展示了如何将你的 Prisma 应用连接到 Supabase Postgres。如果遇到任何问题,请参考 Prisma 故障排除文档。
🌐 This guide shows how to connect your Prisma application to Supabase Postgres. If you encounter any problems, reference the Prisma troubleshooting docs.
如果你打算只使用 Prisma 而不是 Supabase 数据 API(PostgREST),可以在API 设置中关闭它。
🌐 If you plan to solely use Prisma instead of the Supabase Data API (PostgREST), turn it off in the API Settings.
- 在 SQL 编辑器 中,创建一个在 public 模式下拥有全部权限的 Prisma 数据库用户。
- 这让你可以更好地控制 Prisma 的访问权限,并且更容易使用 Supabase 工具进行监控,比如 查询性能仪表板 和 日志浏览器。
密码管理器
为了安全起见,考虑为 Prisma 角色使用密码生成器。
1-- Create custom user2create user "prisma" with password 'custom_password' bypassrls createdb;34-- extend prisma's privileges to postgres (necessary to view changes in Dashboard)5grant "prisma" to "postgres";67-- Grant it necessary permissions over the relevant schemas (public)8grant usage on schema public to prisma;9grant create on schema public to prisma;10grant all on all tables in schema public to prisma;11grant all on all routines in schema public to prisma;12grant all on all sequences in schema public to prisma;13alter default privileges for role postgres in schema public grant all on tables to prisma;14alter default privileges for role postgres in schema public grant all on routines to prisma;15alter default privileges for role postgres in schema public grant all on sequences to prisma;1-- alter prisma password if needed2alter user "prisma" with password 'new_password';在你的电脑上创建一个新的 Prisma 项目
创建一个新目录
1mkdir hello-prisma2cd hello-prisma启动一个新的 Prisma 项目
1npm init -y2npm install prisma tsx @types/pg --save-dev3npm install @prisma/client @prisma/adapter-pg dotenv pg45npx tsc --init67npx prisma init- 在你的项目仪表板上,点击 连接
- 找到你的 Supavisor Session pooler 字符串。它应该以 5432 结尾。它将用于你的
.env文件。
如果你处在IPv6 环境下,或者拥有 IPv4 附加功能,你可以在会话模式下使用直接连接字符串,而不是 Supavisor。
- 如果你打算把 Prisma 部署到无服务器或自动扩展的环境,你还需要你的 Supavisor 事务模式字符串。
- 这个字符串和会话模式字符串一样,但最后使用的是端口 6543。
在你的 .env 文件中,将 DATABASE_URL 变量设置为你的连接字符串
1# Used for Prisma Migrations and within your application2DATABASE_URL="postgres://[DB-USER].[PROJECT-REF]:[PRISMA-PASSWORD]@[DB-REGION].pooler.supabase.com:5432/postgres"把你的字符串中的 [DB-USER] 改成 prisma,然后添加你在第一步创建的密码
1postgres://prisma.[PROJECT-REF]...将 import "dotenv/config" 添加到生成的 prisma.config.ts。如果你使用无服务器环境,请将数据源 URL 改为 DIRECT_URL。
1import "dotenv/config";2import { defineConfig, env } from "prisma/config";34export default defineConfig({5 schema: "prisma/schema",6 migrations: {7 path: "prisma/migrations",8 },9 datasource: {10 url: env("DATABASE_URL"),11 },12});如果你已经修改了你的 Supabase 数据库,就把它和迁移文件同步。否则,就为你的数据库创建新表,然后生成 Prisma 客户端。
在你的 prisma.schema 文件中创建新表
1model Post {2 id Int @id @default(autoincrement())3 title String4 content String?5 published Boolean @default(false)6 author User? @relation(fields: [authorId], references: [id])7 authorId Int?8}910model User {11 id Int @id @default(autoincrement())12 email String @unique13 name String?14 posts Post[]15}commit your migration
1npx prisma migrate dev --name first_prisma_migration2npx prisma generate创建一个 index.ts 文件并运行它以测试你的连接
1import "dotenv/config";2import { PrismaClient } from "./generated/prisma/client";3import { PrismaPg } from "@prisma/adapter-pg";45const adapter = new PrismaPg({ connectionString: process.env.DATABASE_URL });6export const prisma = new PrismaClient({ adapter });78async function main() {9 const val = await prisma.user.findMany({10 take: 10,11 });12 console.log(val);13}1415main()16 .then(async () => {17 await prisma.$disconnect();18 })19 .catch(async (e) => {20 console.error(e);21 await prisma.$disconnect();22 process.exit(1);23});