You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 01:17:44