@raypx/database
Drizzle ORM 与 PostgreSQL 连接管理。
@raypx/database 封装了 Drizzle ORM 与 PostgreSQL 的连接管理,提供单例模式的数据库客户端、连接池配置和健康检查功能。
导出
import {
createDb,
closeDb,
checkDatabaseHealth,
schema,
// Drizzle 操作符
and,
count,
desc,
eq,
gte,
sql,
sum,
} from "@raypx/database"| 导出 | 说明 |
|---|---|
createDb() | 创建或获取数据库客户端(单例模式) |
closeDb() | 关闭数据库连接 |
checkDatabaseHealth() | 执行健康检查 |
schema | 所有数据库 Schema 的统一导出 |
and, eq, desc 等 | Drizzle ORM 查询操作符 |
createDb()
创建数据库连接。采用单例模式,多次调用返回同一实例。
import { createDb } from "@raypx/database"
const db = createDb()
// 执行查询
const result = await db.execute(sql`SELECT 1`)连接池配置
通过环境变量或参数覆盖默认值:
| 环境变量 | 类型 | 默认值 | 说明 |
|---|---|---|---|
DATABASE_URL | string (必填) | - | PostgreSQL 连接字符串 |
DATABASE_POOL_MAX | number | 10 | 最大连接数 |
DATABASE_IDLE_TIMEOUT | number | 20 | 空闲连接超时(秒) |
// 通过参数覆盖
const db = createDb({
databaseUrl: "postgres://user:pass@localhost:5432/mydb",
postgresOptions: {
max: 20,
idle_timeout: 30,
connect_timeout: 15,
},
})连接池建议
推荐根据部署规模设置 DATABASE_POOL_MAX:
- 单实例:10-20(默认 10)
- 多实例(2-5 个 Pod):每个 5-10
- 多实例(5+ 个 Pod):使用 PgBouncer 做连接池代理
closeDb()
关闭数据库连接,释放资源。适用于 Serverless 环境或进程退出时的清理。
import { closeDb } from "@raypx/database"
// 在进程退出时
process.on("SIGTERM", async () => {
await closeDb()
process.exit(0)
})关闭后再次调用 createDb() 会创建新连接。
checkDatabaseHealth()
执行简单的 SELECT 1 查询来检查数据库是否正常。
import { createDb, checkDatabaseHealth } from "@raypx/database"
const db = createDb()
const health = await checkDatabaseHealth(db)
if (health.healthy) {
console.log(`Database OK (${health.latency}ms)`)
} else {
console.error(`Database ERROR: ${health.error}`)
}返回值类型:
interface DatabaseHealthCheck {
healthy: boolean
latency?: number // 查询耗时(毫秒)
error?: string // 错误信息
}Schema
所有数据库表定义通过 schema 统一导出:
import { schema } from "@raypx/database"
// schema 包含所有表定义
// 用于 Better Auth 适配器等需要完整 Schema 的场景类型导出
import type {
DbClient,
DatabaseConfig,
DatabaseConnection,
DatabaseHealthCheck,
} from "@raypx/database"