数据库
配置和使用 PostgreSQL 或 SQLite(基于 Drizzle ORM)。
NextSaas 开箱即用支持 PostgreSQL 和 SQLite。只需设置两个环境变量即可切换数据库,无需修改任何代码。
配置
PostgreSQL(默认)
-
配置
.env:DATABASE_ADAPTER="pg" DATABASE_URL="postgresql://user:password@host:5432/dbname?sslmode=require"
SQLite
-
配置
.env:DATABASE_ADAPTER="sqlite" DATABASE_URL="file:data/local.db"也可以使用内存数据库进行开发:
DATABASE_URL=":memory:"
使用方式
所有数据库访问通过 getDb() 进行:
import { getDb } from "@/db";
export default async function Page() {
const db = await getDb();
const user = await db.users.findById(userId);
const orders = await db.orders.findByUserId(userId);
await db.orders.create({ id, userId, amount, ... });
}也可以导入类型用于组件中:
import { getDb, type Order, type User } from "@/db";修改 Schema
以添加 phone 字段为例:
-
编辑每种数据库对应的 schema 文件:
// PostgreSQL schema export const usersTable = pgTable("users", { // ...已有字段 phone: text("phone"), });// SQLite schema export const usersTable = sqliteTable("users", { // ...已有字段 phone: text("phone"), }); -
生成并执行迁移:
bun run db:generate bun run db:migrate
迁移(Migrations)
修改 schema 后,运行以下两个命令:
-
生成迁移 — 创建 SQL 迁移文件:
bun run db:generate -
应用迁移 — 对数据库执行迁移:
bun run db:migrate
Drizzle Studio
使用 Drizzle Studio 浏览和管理数据库:
bunx drizzle-kit studio添加新的数据库适配器
NextSaas 支持便捷地添加其他数据库。以 MySQL 为例,步骤如下:
-
创建 schema 文件
<src>/db/drivers/mysql/schema.ts,使用 Drizzle 的 MySQL 列类型定义相同的表结构。可参考现有的 PostgreSQL 或 SQLite schema。 -
创建适配器文件
<src>/db/drivers/mysql/adapter.ts,实现所有数据库查询方法。可参考现有适配器了解需要实现的函数签名。 -
在以下文件中注册新驱动:
<src>/db/types.ts— 在DriverType联合类型中添加"mysql"<src>/db/factory.ts— 在createAdapter()和createAuthDrizzle()中添加case "mysql"分支<src>/env.ts— 在DATABASE_ADAPTER校验规则中添加"mysql"
-
配置
.env:DATABASE_ADAPTER="mysql" DATABASE_URL="mysql://user:password@host:3306/dbname" -
生成并执行迁移:
bun run db:generate bun run db:migrate
业务代码无需任何修改 — 一切都通过 getDb() 自动适配。