用途
Neon + Vercel Serverless Postgres 用于在边缘与无服务器环境中连接和使用 Postgres 数据库,面向 Cloudflare Workers、Vercel Edge、Next.js 应用等需要 HTTP/WebSocket 连接方式的运行时场景。
主要能力
资料提供两种接入路径:
- Neon 直连(Neon Direct):多云、可用于 Cloudflare Workers 及任意无服务器平台,依赖 @neondatabase/serverless,并可使用 Neon 的分支(branching)API。
- Vercel Postgres:仅限 Vercel,零配置,自动注入环境变量,依赖 @vercel/postgres。
两种方式均为 HTTP 基础(不使用 TCP),适合无服务器与边缘环境。资料还涵盖:使用连接池连接字符串、SSL 要求、查询与事务写法、Drizzle ORM 等。
使用方式
快速开始:
- 选择平台并安装依赖:
- Neon 直连:
bun add @neondatabase/serverless - Vercel Postgres:
bun add @vercel/postgres
- Neon 直连:
- 获取连接字符串:
- Neon:在 https://neon.tech 注册、创建项目并获取连接字符串,格式为
postgresql://user:password@ep-xyz-pooler.region.aws.neon.tech/dbname?sslmode=require。 - Vercel:在 Vercel 项目中执行
vercel postgres create与vercel env pull .env.local,会自动创建 POSTGRES_URL 等变量。 关键要求:无服务器环境应使用连接池连接字符串(主机名含-pooler.region.aws.neon.tech),并始终包含?sslmode=require。
- Neon:在 https://neon.tech 注册、创建项目并获取连接字符串,格式为
- 查询数据库:
- Neon 直连示例:
import { neon } from '@neondatabase/serverless'; const sql = neon(process.env.DATABASE_URL!);之后用模板标签查询,如await sqlSELECT * FROM users WHERE id = ${userId}``,事务使用sql.transaction([...])。 - Vercel Postgres 示例:
import { sql } from '@vercel/postgres';查询得到const { rows } = await sqlSELECT * FROM users WHERE id = ${userId}``,手动事务需sql.connect()后执行BEGIN/COMMIT,并在 finally 中client.release()。
- Neon 直连示例:
关键规则(资料明确给出)
应做:使用连接池连接字符串、使用模板标签语法防止 SQL 注入、连接字符串包含 sslmode=require、事务后释放连接、边缘环境用 Drizzle ORM(Cloudflare Workers 不用 Prisma)、连接字符串放环境变量、使用 Neon 分支做预览环境与测试、监控连接池用量、用 try/catch 与回滚处理错误、INSERT/UPDATE 用 RETURNING 一次取回数据。
不应做:无服务器函数不用非连接池连接、不拼接 SQL 字符串、不省略 sslmode=require、手动 Vercel 事务不忘 client.release()、Cloudflare Workers 不用 Prisma、不硬编码连接字符串、不在边缘函数运行迁移、不提交 .env 文件、无服务器函数不用 POSTGRES_URL_NON_POOLING、不超连接上限。
常见错误(资料列出前 5 个,共 15 个)
- 连接池耗尽:改用池化连接字符串。
- 不支持 TCP 连接:改用基于 HTTP 的 @neondatabase/serverless,而非 pg 或 postgres.js。
- 字符串拼接导致 SQL 注入:始终用模板标签。
- 缺少 SSL 模式:追加
?sslmode=require。 - 连接泄漏(Vercel Postgres):在 finally 中调用
client.release()。
适用场景
- Cloudflare Worker 连接 Neon:在 fetch 中用
neon(env.DATABASE_URL)查询并返回 JSON。 - Next.js Server Actions 配合 Vercel Postgres。
- 使用 Drizzle 做类型安全查询。
- 数据库事务(多操作要么全成功要么全失败)。
- 使用分支为每个 PR/预览部署提供隔离数据库。
限制与依赖
- 资料标注状态为 Production Ready,最后更新 2025-11-21,无必须依赖。
- 必需包:@neondatabase/serverless@^1.0.2、@vercel/postgres@^0.10.0。
- 可选包:drizzle-orm@^0.44.7、drizzle-kit@^0.31.0、@prisma/client@^6.10.0(仅 Node.js,不兼容边缘)、@prisma/adapter-neon@^6.10.0、neonctl@^2.16.1、zod@^3.24.0。
- 版本经 2025-10-29 验证。
- 资料提到基于生产部署(Cloudflare Workers 每日 5 万+ 请求 0 连接错误;Vercel Next.js 电商站月 10 万+ 用户),但未提供更多可验证细节。
- 具体收费、价格、平台兼容范围等资料未提供。
官方文档:Neon https://neon.tech/docs ,Neon Serverless 包 https://github.com/neondatabase/serverless ,Vercel Postgres https://vercel.com/docs/storage/vercel-postgres ,Neon 分支指南 https://neon.tech/docs/guides/branching ,Neonctl CLI https://neon.tech/docs/reference/cli ,Drizzle + Neon https://orm.drizzle.team/docs/quick-postgresql/neon ,Prisma + Neon https://www.prisma.io/docs/orm/overview/databases/neon 。