毛毛雨
与小雨联系 #
🌐 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 和相关依赖。
1npm i drizzle-orm postgres2npm i -D drizzle-kit2
Create your models
创建一个 schema.ts 文件并定义你的模型。
1import { pgTable, serial, text, varchar } from "drizzle-orm/pg-core";23export const users = pgTable('users', {4 id: serial('id').primaryKey(),5 fullName: text('full_name'),6 phone: varchar('phone', { length: 256 }),7});3
Connect
使用连接池器连接到你的数据库。
从项目 Connect 面板 中,复制“Shared Pooler”选项的 URI,并将其保存为 DATABASE_URL 环境变量。记得将密码占位符替换为你实际的数据库密码。
在本地,SUPABASE_DB_URL 需要进行调整以适应 Docker 解析器
1import 'dotenv/config'23import { drizzle } from 'drizzle-orm/postgres-js'4import postgres from 'postgres'56const databaseUrl = process.env.DATABASE_URL7if (!databaseUrl) throw new Error('DATABASE_URL is not set')89let connectionString = databaseUrl10if (connectionString.includes('postgres:postgres@supabase_db_')) {11 const url = new URL(connectionString)12 url.hostname = url.hostname.split('_')[1]13 connectionString = url.href14}1516// Disable prefetch as it is not supported for "Transaction" pool mode17export const client = postgres(connectionString, { prepare: false })18export const db = drizzle(client)