数据库
PostgreSQL 数据库
NEXTDEVKIT 的完整 PostgreSQL 设置指南,包括云提供商和自托管选项。
PostgreSQL 是 NEXTDEVKIT 标准 Next.js 部署的默认数据库,提供强大的功能、出色的性能和广泛的托管支持。
🚀 为什么选择 PostgreSQL?
选择 PostgreSQL 作为 NEXTDEVKIT 的默认数据库是因为:
- 🔧 功能齐全:支持复杂查询、事务和关系
- 📊 ACID 合规:确保数据完整性和一致性
- 🌐 广泛支持:在大多数托管平台上可用
- 🎯 开发者友好:出色的工具和文档
- ⚡ 性能:为读写操作优化
- 🔒 安全性:企业级安全功能
环境变量
在 .env.local
中配置您的 PostgreSQL 连接:
# PostgreSQL 连接
DATABASE_URL="postgresql://username:password@localhost:5432/dbname"
🌐 云 PostgreSQL 提供商
1. Neon(推荐)
Neon 是专为无服务器应用程序设计的现代 PostgreSQL 平台:
功能:
- 🚀 无服务器 PostgreSQL
- 🔄 自动扩展
- 🎯 慷慨的免费层
- ⚡ 即时配置
- 🔀 开发分支
设置步骤:
- 在 neon.tech 注册
- 创建新项目
- 复制连接字符串
- 添加到您的
.env.local
或.env
:
2. Supabase
Supabase 提供完整的后端即服务和 PostgreSQL:
功能:
- 🗄️ PostgreSQL 数据库
- 🔐 内置身份验证
- 📡 实时订阅
- 🎨 管理仪表板
- 🔒 行级安全
设置步骤:
- 在 supabase.com 创建账户
- 创建新项目
- 导航到设置 → 数据库
- 复制连接字符串
- 添加到您的
.env.local
或.env
:
🔄 架构管理和迁移
更新数据库架构
- 修改架构文件:
编辑
src/database/schema.ts
来添加/修改表:
// 添加新表
export const post = pgTable("post", {
id: text("id").primaryKey(),
title: text("title").notNull(),
content: text("content"),
authorId: text("authorId").references(() => user.id),
published: boolean("published").default(false),
createdAt: timestamp("createdAt").defaultNow(),
updatedAt: timestamp("updatedAt").defaultNow(),
});
// 添加关系
export const postRelations = relations(post, ({ one }) => ({
author: one(user, { fields: [post.authorId], references: [user.id] }),
}));
-
生成迁移:
pnpm db:generate
-
查看迁移: 检查
drizzle/
目录中生成的 SQL 文件 -
应用迁移:
pnpm db:push
迁移文件
生成的迁移文件存储在 drizzle/
目录中:
🔍 数据库工作室
使用 Drizzle Studio
启动可视化数据库管理界面:
pnpm db:studio
功能:
- 📊 浏览表数据
- ✏️ 就地编辑记录
- 🔍 运行自定义 SQL 查询
- 🎯 查看表关系
- 📈 监控查询性能
🛠️ 故障排除
常见问题
连接错误:
- 验证
DATABASE_URL
是否正确 - 检查防火墙设置
- 确保 PostgreSQL 正在运行
- 验证 SSL 要求
迁移失败:
- 检查架构中的语法错误
- 验证外键约束
- 确保数据库权限
- 查看迁移日志
性能问题:
- 添加数据库索引
- 优化查询结构
- 监控连接池使用情况
- 检查 N+1 查询问题
🔗 相关资源
🎯 下一步
现在您了解了数据库架构,深入了解您选择的平台的具体设置: