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

使用drizzle-seed填充数据库遇TypeError及SQL语法错误求助

排查Drizzle Seed的两个核心问题

1. SQL语法错误:“overriding system value values”

这个错误多半是你在seed数据里手动指定了自增ID的值,而generatedAlwaysAsIdentity()配置的字段是数据库自动生成的,手动插入会触发语法冲突。

  • 检查seed.ts的插入语句,不要给id字段传值:
    错误示例:
    await db.insert(users).values({ id: 1, name: 'Test User' });
    
    正确示例:
    await db.insert(users).values({ name: 'Test User' });
    
  • 如果必须手动指定自增ID(比如数据依赖固定ID),改schema配置的同时加overrideIdentity():
    schema调整:
    id: serial('id').primaryKey().generatedAsIdentity({ generated: 'always', increment: true }),
    
    seed插入语句:
    await db.insert(users).values({ id: 1, name: 'Test User' }).overrideIdentity();
    

2. TypeError: Cannot read properties of undefined (reading 'query')

这个问题说明Drizzle的数据库连接实例没正确初始化,导致db.query不存在。

  • 检查seed.ts的数据库连接代码,必须传入schema参数才能生成query方法:
    import { drizzle } from 'drizzle-orm/postgres-js';
    import postgres from 'postgres';
    import * as schema from './schema';
    
    const client = postgres(process.env.DATABASE_URL!);
    const db = drizzle(client, { schema }); // 这里schema不能漏
    
  • 确认seed脚本能读到环境变量,比如在package.json脚本里明确加载.env:
    "scripts": {
      "seed": "dotenv -e .env tsx seed.ts"
    }
    
  • 核对drizzle-orm和数据库驱动(比如postgres-js)的版本,避免版本不兼容导致实例初始化失败。

额外排查项

  • 确保seed用的schema和Nuxt项目里的是同一个文件,别搞两套schema。
  • 跑seed前先执行迁移:npx drizzle-kit migrate,保证表结构已经创建好。
  • 直接在seed脚本里打印console.log(db),看有没有query属性,判断连接是否成功。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 15:03:21