数据库
了解数据库选项以及如何为项目配置数据库
本文档涵盖了项目可用的数据库选项、如何设置和连接到数据库,以及如何使用 Drizzle ORM。
设置
项目使用 PostgreSQL 作为数据库系统,使用 Drizzle ORM 进行数据库访问和管理。设置设计灵活,允许您使用各种 PostgreSQL 托管选项。
创建数据库
托管 PostgreSQL 是开发和生产环境的推荐方法。它们提供简单的设置、管理,并且通常包含足够入门的免费套餐。
Neon(推荐)
Neon 是一个具有出色的开发者体验的 PostgreSQL 服务,,它是小型项目的绝佳选择。
设置步骤:
- 在 neon.tech 创建账户
- 创建新项目
- 创建数据库
- 从仪表盘获取连接字符串
- 将连接字符串作为
DATABASE_URL
添加到.env
文件中
# Neon 连接字符串示例
DATABASE_URL="postgres://user:password@ep-something.us-east-2.aws.neon.tech/database?sslmode=require"
您可以在此文档中找到有关如何设置 Neon 的更多信息。
Supabase
Supabase 提供具有身份验证和存储等附加功能的 PostgreSQL 数据库,它是中大型项目的绝佳选择。
设置步骤:
- 在 supabase.com 创建账户
- 创建新项目
- 点击
Connect
按钮 - 在
Transaction pooler
部分获取连接字符串 - 将连接字符串作为
DATABASE_URL
添加到.env
文件中
# Supabase 连接字符串示例
DATABASE_URL="postgres://postgres:your-password@db.something.supabase.co:6543/postgres"
您可以在此文档中找到有关如何设置 Supabase 的更多信息,或查看 Supabase 上的连接文档。
初始化数据库
MkSaaS 使用 Drizzle ORM 与数据库交互。您可以通过运行以下命令初始化数据库:
pnpm run db:generate # 生成 Drizzle 客户端
pnpm run db:migrate # 迁移数据库
npm run db:generate # 生成 Drizzle 客户端
npm run db:migrate # 迁移数据库
yarn db:generate # 生成 Drizzle 客户端
yarn db:migrate # 迁移数据库
bun run db:generate # 生成 Drizzle 客户端
bun run db:migrate # 迁移数据库
这将生成数据库迁移文件,并将数据库架构迁移到数据库中。
您可以在数据库集成文档中找到有关数据库的更多信息。
如果您正在设置环境,现在您可以回到环境配置文档并继续。本文档的其余部分可以稍后阅读。
环境配置
设置环境变量
创建数据库(其他选项)
其他数据库托管服务
您可以在 Drizzle ORM 文档中找到有关其他数据库选项的更多信息。
- Vercel Postgres
- Prisma Postgres
- AWS RDS(PostgreSQL)
- Google Cloud SQL(PostgreSQL)
- Azure Database for PostgreSQL
自托管 PostgreSQL
Docker
您可以在 Docker 容器中运行 PostgreSQL 进行本地开发:
docker run --name drizzle-postgres -e POSTGRES_PASSWORD=mypassword -d -p 5432:5432 postgres
然后使用此连接字符串:
DATABASE_URL="postgres://postgres:mypassword@localhost:5432/postgres"
您可以在此文档中找到有关如何在本地设置 PostgreSQL 的更多信息。
本地安装
直接在您的机器上安装 PostgreSQL:
- 从 postgres.org 下载或使用包管理器
- 安装并设置密码
- 创建数据库
然后使用此连接字符串:
DATABASE_URL="postgres://your-username:your-password@localhost:5432/database-name"
使用 Drizzle ORM
模板使用 Drizzle ORM,专注于类型安全和开发者体验的 ORM,Drizzle 支持与各种数据库和提供商兼容。
当前配置
目前,项目配置为使用 postgres-js
依赖库,以便更好地兼容各种数据库和运行环境:
import { drizzle } from 'drizzle-orm/postgres-js';
import postgres from 'postgres';
import * as schema from './schema';
let db: ReturnType<typeof drizzle> | null = null;
export async function getDb() {
if (db) return db;
const connectionString = process.env.DATABASE_URL!;
const client = postgres(connectionString, { prepare: false });
db = drizzle(client, { schema });
return db;
}
数据库架构
数据库架构在 src/db/schema.ts
中使用 Drizzle 的架构定义语法定义:
import { pgTable, text, timestamp } from "drizzle-orm/pg-core";
export const user = pgTable("user", {
id: text("id").primaryKey(),
name: text('name').notNull(),
email: text('email').notNull().unique(),
// ... 其他字段
});
// ... 其他表
您可以在下图中看到数据库的架构:
使用其他数据库提供商
Drizzle ORM 支持多个数据库提供商。如果您想使用不同的提供商:
- 安装适当的 Drizzle 适配器包
- 更新
src/db/index.ts
以使用正确的驱动程序 - 如有必要,调整
src/db/schema.ts
中的架构
示例:使用 MySQL
// 1. 安装:npm install drizzle-orm mysql2
// 2. 更新 src/db/index.ts
import { drizzle } from 'drizzle-orm/mysql2';
import mysql from 'mysql2/promise';
const connection = await mysql.createConnection(process.env.DATABASE_URL!);
const db = drizzle(connection);
export default db;
示例:使用 SQLite
// 1. 安装:npm install drizzle-orm better-sqlite3
// 2. 更新 src/db/index.ts
import { drizzle } from 'drizzle-orm/better-sqlite3';
import Database from 'better-sqlite3';
const sqlite = new Database('sqlite.db');
const db = drizzle(sqlite);
export default db;
有关 Drizzle ORM 及其适配器的更多信息,请参考 Drizzle ORM 文档。
如果您使用不同的数据库提供商,您需要更新 src/lib/auth.ts
文件以使用正确的驱动程序和架构,您可以在 Better Auth 文档中找到有关如何执行此操作的更多信息。
故障排除
连接问题
如果您在连接数据库时遇到问题:
- 检查您的
DATABASE_URL
格式是否正确 - 确保您的 IP 在数据库防火墙设置中被允许
- 验证数据库用户具有正确的权限
- 检查是否有任何网络限制
架构迁移问题
如果您在数据库迁移时遇到问题:
- 检查您的架构定义是否有错误
- 确保您的迁移脚本格式正确
- 尝试手动运行迁移以查看详细错误
有关更详细的帮助,请参考 Drizzle ORM 文档。
参考
- Drizzle ORM
- Neon
- Supabase
- Supabase | 使用 Drizzle 连接
- 使用 Drizzle 的数据库连接
- Drizzle 与 Neon Postgres
- Drizzle 与 Supabase Postgres
- Drizzle 与 Vercel Edge Functions
- Drizzle | 如何在本地设置 PostgreSQL
视频教程
下一步
现在您了解了如何在 MkSaaS 中设置数据库,您可能想要探索这些相关功能: