SuperAPI AI 工具集

neon-vercel-postgres

部署与运维

查看项目

更新于 10-15 09:22

技能介绍

用途

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 等。

使用方式

快速开始:

  1. 选择平台并安装依赖:
    • Neon 直连:bun add @neondatabase/serverless
    • Vercel Postgres:bun add @vercel/postgres
  2. 获取连接字符串:
    • 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。
  3. 查询数据库:
    • 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()。

关键规则(资料明确给出)

应做:使用连接池连接字符串、使用模板标签语法防止 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 个)

  1. 连接池耗尽:改用池化连接字符串。
  2. 不支持 TCP 连接:改用基于 HTTP 的 @neondatabase/serverless,而非 pg 或 postgres.js。
  3. 字符串拼接导致 SQL 注入:始终用模板标签。
  4. 缺少 SSL 模式:追加 ?sslmode=require。
  5. 连接泄漏(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 。