Logo文档
数据库

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
  • 🔄 自动扩展
  • 🎯 慷慨的免费层
  • ⚡ 即时配置
  • 🔀 开发分支

设置步骤

  1. neon.tech 注册
  2. 创建新项目
  3. 复制连接字符串
  4. 添加到您的 .env.local.env

2. Supabase

Supabase 提供完整的后端即服务和 PostgreSQL:

功能

  • 🗄️ PostgreSQL 数据库
  • 🔐 内置身份验证
  • 📡 实时订阅
  • 🎨 管理仪表板
  • 🔒 行级安全

设置步骤

  1. supabase.com 创建账户
  2. 创建新项目
  3. 导航到设置 → 数据库
  4. 复制连接字符串
  5. 添加到您的 .env.local.env

🔄 架构管理和迁移

更新数据库架构

  1. 修改架构文件: 编辑 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] }),
}));
  1. 生成迁移

    pnpm db:generate
  2. 查看迁移: 检查 drizzle/ 目录中生成的 SQL 文件

  3. 应用迁移

    pnpm db:push

迁移文件

生成的迁移文件存储在 drizzle/ 目录中:

🔍 数据库工作室

使用 Drizzle Studio

启动可视化数据库管理界面:

pnpm db:studio

功能

  • 📊 浏览表数据
  • ✏️ 就地编辑记录
  • 🔍 运行自定义 SQL 查询
  • 🎯 查看表关系
  • 📈 监控查询性能

🛠️ 故障排除

常见问题

连接错误

  • 验证 DATABASE_URL 是否正确
  • 检查防火墙设置
  • 确保 PostgreSQL 正在运行
  • 验证 SSL 要求

迁移失败

  • 检查架构中的语法错误
  • 验证外键约束
  • 确保数据库权限
  • 查看迁移日志

性能问题

  • 添加数据库索引
  • 优化查询结构
  • 监控连接池使用情况
  • 检查 N+1 查询问题

🔗 相关资源


🎯 下一步

现在您了解了数据库架构,深入了解您选择的平台的具体设置: