SuperAPI AI 工具集

neon-vercel-postgres

部署与运维

查看项目

更新于 10-15 09:03

技能介绍

用途

本技能面向需要在无服务器(Serverless)与边缘(Edge)环境中使用 Postgres 数据库的开发者,帮助在 Cloudflare Workers、Vercel Edge、Node.js 等运行时中搭建 Neon 或 Vercel Postgres。两者共用同一 Neon 后端:Neon 直连提供多云灵活性与分支 API,Vercel Postgres 在 Vercel 上零配置并自动注入环境变量。两者均基于 HTTP(无需 TCP),适合无服务器/边缘环境。

主要能力

  • 连接池:使用带 -pooler. 的连接串自动复用连接,避免无服务器环境连接耗尽。
  • 类 Git 分支:Neon 支持数据库分支,可用于隔离开发与迁移历史。
  • ORM 集成:推荐 Drizzle ORM(边缘兼容),也支持 Prisma(仅 Node.js 运行时)。
  • 事务:Neon 提供数组式与回调式事务 API;Vercel Postgres 需手动 BEGIN/COMMIT/ROLLBACK。
  • 迁移:支持原生 SQL、Drizzle Kit、Prisma Migrate 三种方式。
  • 已知问题预防:文档列出 19 个常见问题及规避方法。

使用方式

  1. 安装依赖:Neon 直连用 npm install @neondatabase/serverless;Vercel Postgres 用 npm install @vercel/postgres;配合 Drizzle 用 npm install drizzle-orm@0.45.1 @neondatabase/serverless@1.0.2 与 npm install -D drizzle-kit@0.31.8。
  2. 获取连接串:在 https://neon.tech 创建项目,或运行 vercel postgres create 与 vercel env pull .env.local,也可用 neonctl(neonctl@2.19.0)创建。必须使用带 -pooler. 的连接串并包含 ?sslmode=require。
  3. 配置环境变量:Neon 直连用 DATABASE_URL;Vercel 自动生成 POSTGRES_URL(查询用)、POSTGRES_PRISMA_URL(Prisma 迁移用)、POSTGRES_URL_NON_POOLING(无服务器中避免使用)等。Cloudflare Workers 在 wrangler.jsonc 的 vars 中配置。
  4. 查询:必须使用模板标签语法 sql\...`` 以防 SQL 注入,禁止字符串拼接。
  5. 建表与迁移:可用原生 SQL、Drizzle(npx drizzle-kit generate / migrate)或 Prisma(npx prisma migrate dev)。
  6. 部署测试:Cloudflare Workers 用 npx wrangler deploy,Vercel 用 vercel deploy --prod,并用 curl 测试接口。

适用场景

  • Cloudflare Workers、Vercel Edge 等边缘运行时访问 Postgres。
  • 高并发无服务器函数需要连接池。
  • 需要数据库分支进行开发隔离。
  • 使用 Drizzle ORM 构建边缘兼容的数据层。

限制与关键规则

  • 无服务器环境必须使用池化连接串,否则出现连接池耗尽。
  • 连接串必须含 ?sslmode=require。
  • 边缘运行时不支持 TCP,须用 @neondatabase/serverless 而非 pg 或 postgres.js。
  • Prisma 无法在 Cloudflare Workers 运行,需改用 Drizzle。
  • 迁移须在 Node.js 环境执行,不能在边缘函数中运行。
  • Vercel Postgres 手动事务须在 finally 中调用 client.release(),防止连接泄漏。
  • 边缘函数事务应保持简短(<5s),避免超时。
  • Neon 免费层约 5 分钟无活动后自动挂起,首次请求可能有 1-2 秒唤醒延迟;可将查询超时设为 >=10s,或设置最小计算单元 >0 关闭自动挂起。
  • 免费层并发连接上限为 100。

文档还列出连接池耗尽、TCP 不支持、SQL 注入、缺少 SSL、连接泄漏、环境变量错误、事务超时、Prisma 兼容性、分支 API 鉴权、分支删除后连接串失效、冷启动超时、Drizzle 类型不匹配、跨分支迁移冲突、PITR 时间戳越界等问题及预防方法。