毛毛雨
与小雨联系 #
🌐 Connecting with Drizzle
Drizzle ORM 是一个针对 SQL 数据库的 TypeScript ORM,设计时最大化考虑了类型安全。你可以使用他们的 ORM 来连接你的数据库。
如果你打算只使用 Drizzle,而不用 Supabase 数据 API(PostgREST),你可以在 API 设置 中关闭后者。
🌐 If you plan on solely using Drizzle instead of the Supabase Data API (PostgREST), you can turn off the latter in the API Settings.
1
Install
安装 Drizzle 和相关依赖。
npm i drizzle-orm postgresnpm i -D drizzle-kit2
Create your models
创建一个 schema.ts 文件并定义你的模型。
import { pgTable, serial, text, varchar } from "drizzle-orm/pg-core";export const users = pgTable('users', { id: serial('id').primaryKey(), fullName: text('full_name'), phone: varchar('phone', { length: 256 }),});3
Connect
使用连接池器连接到你的数据库。
从项目 Connect 面板 中,复制“Shared Pooler”选项的 URI,并将其保存为 DATABASE_URL 环境变量。记得将密码占位符替换为你实际的数据库密码。
在本地,SUPABASE_DB_URL 需要进行调整以适应 Docker 解析器
import 'dotenv/config'import { drizzle } from 'drizzle-orm/postgres-js'import postgres from 'postgres'const databaseUrl = process.env.DATABASE_URLif (!databaseUrl) throw new Error('DATABASE_URL is not set')let connectionString = databaseUrlif (connectionString.includes('postgres:postgres@supabase_db_')) { const url = new URL(connectionString) url.hostname = url.hostname.split('_')[1] connectionString = url.href}// Disable prefetch as it is not supported for "Transaction" pool modeexport const client = postgres(connectionString, { prepare: false })export const db = drizzle(client)