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

Next.js + Drizzle 连接PostgreSQL失败,求助配置问题

解决Next.js + Drizzle + PostgreSQL连接字符串缺失错误

针对你遇到的VercelPostgresError: missing_connection_string错误,按以下步骤排查修复:

1. 校验环境变量基础配置

  • 检查.env/.env.development.local文件:确保POSTGRES_URL变量名完全大写,值无多余引号、空格或换行。正确格式示例:
    POSTGRES_URL="postgresql://username:password@host:port/dbname"
    
  • 确认当前环境生效的配置文件:Next.js环境变量加载优先级为 .env.development.local > .env.local > .env.development > .env,避免修改了未生效的文件。

2. 确保代码上下文正确

  • Drizzle数据库连接属于服务器端代码,禁止在客户端组件中直接使用(会泄露敏感信息,且客户端无法读取非NEXT_PUBLIC_前缀的变量)。确保db实例仅在服务器组件、API路由或Server Action中导入使用。
  • 若使用@vercel/postgres包,需正确导入sql实例:
    import { sql } from '@vercel/postgres';
    import { drizzle } from 'drizzle-orm/vercel-postgres';
    
    export const db = drizzle(sql);
    

3. 修复Drizzle配置文件

你的drizzle.config.ts存在冗余配置,且未在CLI运行时加载环境变量,修改如下:

import { defineConfig } from 'drizzle-kit';
// 手动加载环境变量(drizzle-kit是独立CLI,不会自动读取Next.js的env)
import { loadEnvConfig } from '@next/env';
const projectDir = process.cwd();
loadEnvConfig(projectDir);

export default defineConfig({
  schema: "./db/schema.ts",
  out: "./drizzle",
  dialect: "postgresql",
  dbCredentials: {
    url: process.env.POSTGRES_URL!,
  },
});

关键:必须在defineConfig之前加载环境变量,否则drizzle-kit运行时无法读取POSTGRES_URL。

4. 验证环境变量读取状态

在drizzle.config.ts中添加日志,确认变量是否加载成功:

console.log('POSTGRES_URL:', process.env.POSTGRES_URL);

运行npx drizzle-kit push查看控制台输出,若显示undefined,需检查配置文件路径、文件名是否拼写正确。

5. 重启开发服务器

修改.env文件后,必须重启Next.js开发服务器,新的环境变量才会生效。

内容的提问来源于stack exchange,提问作者Gen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 08:27:42