
Neon:Serverless PostgreSQL
Neon 将计算与存储分离,实现自动缩零(空闲时零费用)和即时数据库分支。

关键特性
- 自动缩零:无活动后暂停,约 500ms 恢复
- 分支:秒级创建时间点数据库副本
- 自动扩缩容:0.25 到 16 CU 自动调整
- 只读副本:即时创建只读副本
连接
import { neon } from '@neondatabase/serverless'
// 直接连接(适用于边缘/Serverless)
const sql = neon(process.env.DATABASE_URL!)
const users = await sql`SELECT * FROM users LIMIT 10`
const user = await sql`SELECT * FROM users WHERE id = ${userId}`
// 带事务
const result = await sql.transaction([
sql`INSERT INTO orders (user_id, total) VALUES (${userId}, ${total})`,
sql`UPDATE users SET order_count = order_count + 1 WHERE id = ${userId}`,
])
// 使用 pg(连接池)
import { Pool } from 'pg'
import { neonConfig } from '@neondatabase/serverless'
import ws from 'ws'
neonConfig.webSocketConstructor = ws // Node.js 必需
const pool = new Pool({
connectionString: process.env.DATABASE_URL,
ssl: true,
})

数据库分支
# 安装 Neon CLI
npm install -g neonctl
# 为功能开发创建分支
neonctl branches create --name feature/new-schema --parent main
# 获取分支的连接字符串
neonctl connection-string feature/new-schema
# 合并后删除分支
neonctl branches delete feature/new-schema
// CI/CD 中根据环境选择分支
const DATABASE_URL = process.env.CI
? process.env.NEON_BRANCH_URL // 当前 PR 的分支
: process.env.DATABASE_URL // 主数据库
Next.js App Router 集成
// lib/db.ts
import { neon } from '@neondatabase/serverless'
import { drizzle } from 'drizzle-orm/neon-http'
import * as schema from './schema'
const sql = neon(process.env.DATABASE_URL!)
export const db = drizzle(sql, { schema })
// app/api/users/route.ts
import { db } from '@/lib/db'
import { users } from '@/lib/schema'
export async function GET() {
const allUsers = await db.select().from(users).limit(20)
return Response.json(allUsers)
}

冷启动优化
// Neon 在首次连接时约 500ms 唤醒
// 使用连接池 URL (pooler.neon.tech) 保持连接活跃
const sql = neon(process.env.DATABASE_POOLER_URL!) // 使用池化端点
// 预热:应用启动时 ping
await sql`SELECT 1`
成本模型
| 使用情况 | 费用 |
|---|---|
| 计算(暂停) | $0 |
| 计算(运行) | $0.102/小时 每 CU |
| 存储 | $0.000164/GiB-小时 |
| 免费套餐 | 0.5 CU, 3 GiB 存储 |
适用于:预览部署、开发、低流量项目。