使用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调整:
seed插入语句:id: serial('id').primaryKey().generatedAsIdentity({ generated: 'always', increment: true }),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
相关产品推荐
相关产品推荐

