Nestjs项目Prisma seed执行提示成功但PostgreSQL数据库无数据如何解决
Prisma 执行seed提示成功但数据库无变更排查方案
1. 先确认seed.ts是否真的被执行
直接在你的seed.ts main 函数最开头加入打印日志,运行seed命令后观察终端是否输出了对应的内容:
async function main() { console.log('✅ 我的seed文件真的跑了!') // 新增这行测试 console.log(`Start seeding ...`); // 原有逻辑不变 }
如果运行命令后没看到这行日志,说明seed.ts完全没被执行,走下面的配置排查。
2. 检查package.json的seed配置
Prisma需要在package.json中显式指定seed执行命令,漏加的话会出现提示成功但实际没跑代码的情况,配置格式如下:
{ "name": "你的项目名", "dependencies": { // 你的项目依赖保留不变 }, // 新增prisma配置块 "prisma": { "seed": "ts-node prisma/seed.ts" } }
注意路径要和你实际seed.ts的存放路径对应,默认seed.ts是放在项目根目录的prisma文件夹下,如果你放在其他位置要修改对应路径。
3. 验证数据库连接指向是否正确
很多时候是.env里的DATABASE_URL配置错了,数据插到了其他库/其他环境你没察觉,可以在seed.ts里加一行打印当前连接的数据库信息确认:
async function main() { // 加这行看当前连的库是否符合预期 const dbName = await prisma.$queryRaw`SELECT current_database()` console.log('当前连接的数据库:', dbName) console.log(`Start seeding ...`); // 原有逻辑不变 }
4. 直接手动执行seed.ts排查
绕开prisma的seed命令,直接手动执行文件看是否正常:
# 先安装必要依赖 yarn add -D ts-node typescript @types/node # 执行你的seed.ts,注意修改为对应实际路径 npx ts-node prisma/seed.ts
如果手动执行后数据库有数据、日志正常打印,说明是prisma cli的配置问题,建议升级prisma到最新稳定版,目前seed功能已经是正式特性,不需要加--preview-feature参数,升级后直接跑yarn prisma db seed即可。
5. 其他可能的原因
- 你的User模型存在未设置默认值的必填字段,seed里传的参数不全,但因为代码没被执行所以没触发报错
- 使用了旧版本prisma的preview seed命令存在已知bug,升级到4.x以上稳定版即可修复
内容的提问来源于stack exchange,提问作者Developer Hub
相关产品推荐
相关产品推荐

