Vercel/Postgres搭配Next.js官方快速入门教程无法运行求助
排查Vercel Postgres快速入门连接错误
按Vercel官方Postgres快速入门指南操作,严格遵循步骤后仍出现连接终止类错误,使用的示例代码如下:
import { db } from '@vercel/postgres'; import { NextApiRequest, NextApiResponse } from 'next'; export default async function handler( request: NextApiRequest, response: NextApiResponse, ) { const client = await db.connect(); try { await client.sql`CREATE TABLE Pets ( Name varchar(255), Owner varchar(255) );`; const names = ['Fiona', 'Lucy']; await client.sql`INSERT INTO Pets (Name, Owner) VALUES (${names[0]}, ${names[1]});`; } catch (error) { return response.status(500).json({ error }); } const pets = await client.sql`SELECT * FROM Pets;`; return response.status(200).json({ pets }); }
以下是几个实用的排查方向:
核对环境变量配置
确认Vercel项目中已正确添加Postgres相关环境变量(POSTGRES_URL、POSTGRES_PRISMA_URL等),这些变量需直接从Vercel Postgres控制台复制。本地开发时,要把变量同步到.env.local文件,注意不要出现拼写错误或多余空格。锁定依赖版本
@vercel/postgres目前处于Beta阶段,版本迭代频繁,建议锁定一个相对稳定的版本安装,比如执行:npm install @vercel/postgres@0.5.0同时确保Next.js版本在13.x及以上,避免版本兼容问题。
修复连接资源泄漏问题
当前代码中手动获取的client未释放,容易导致连接池耗尽引发错误,建议添加释放逻辑:export default async function handler( request: NextApiRequest, response: NextApiResponse, ) { const client = await db.connect(); try { await client.sql`CREATE TABLE Pets ( Name varchar(255), Owner varchar(255) );`; const names = ['Fiona', 'Lucy']; await client.sql`INSERT INTO Pets (Name, Owner) VALUES (${names[0]}, ${names[1]});`; const pets = await client.sql`SELECT * FROM Pets;`; return response.status(200).json({ pets }); } catch (error) { return response.status(500).json({ error }); } finally { // 必须释放连接回池 client.release(); } }或者更简单,直接使用
db.sql无需手动管理连接:// 去掉const client = await db.connect(); try { await db.sql`CREATE TABLE Pets ( Name varchar(255), Owner varchar(255) );`; const names = ['Fiona', 'Lucy']; await db.sql`INSERT INTO Pets (Name, Owner) VALUES (${names[0]}, ${names[1]});`; const pets = await db.sql`SELECT * FROM Pets;`; return response.status(200).json({ pets }); } catch (error) { return response.status(500).json({ error }); }检查Postgres实例状态
登录Vercel控制台查看你的Postgres实例是否正常运行,免费额度的实例长时间闲置会自动休眠,访问前需要手动唤醒。排除本地网络问题
如果是本地开发报错,尝试直接在Vercel上部署测试,若部署后能正常运行,大概率是本地网络环境无法访问Vercel的Postgres端点,可尝试切换网络或使用代理。
内容的提问来源于stack exchange,提问作者Ryan Wang
相关产品推荐
相关产品推荐

