Raypx

@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, descDrizzle ORM 查询操作符

createDb()

创建数据库连接。采用单例模式,多次调用返回同一实例。

import { createDb } from "@raypx/database"

const db = createDb()

// 执行查询
const result = await db.execute(sql`SELECT 1`)

连接池配置

通过环境变量或参数覆盖默认值:

环境变量类型默认值说明
DATABASE_URLstring (必填)-PostgreSQL 连接字符串
DATABASE_POOL_MAXnumber10最大连接数
DATABASE_IDLE_TIMEOUTnumber20空闲连接超时(秒)
// 通过参数覆盖
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"

On this page