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

如何重置Postgres序列以匹配Prisma迁移历史记录

解决PostgreSQL手动改表后Prisma migrate dev 序列不匹配问题

报错原因

该报错是因为手动修改表结构时,改动了Product表id列关联的自增序列的归属、当前值或其他参数,和Prisma Schema中定义的自增主键规则不一致导致的。

操作步骤

  • 第一步:确认序列归属
    Prisma默认给自增id生成的序列名格式为"表名_列名_seq",本例对应序列名为Product_id_seq。先执行SQL查询确认序列归属正确:
    SELECT sequence_name, table_name, column_name 
    FROM information_schema.sequences 
    WHERE sequence_name = 'Product_id_seq';
    
    如果查询结果的table_name和column_name不匹配Product和id,执行下面语句修复归属:
    ALTER SEQUENCE "Product_id_seq" OWNED BY "Product"."id";
    
  • 第二步:确认Prisma期望的序列值
    Prisma要求序列的下一个取值必须大于当前Product表中已存在的最大id,避免主键冲突。执行下面SQL查询当前表的最大id:
    SELECT COALESCE(MAX(id), 0) AS max_id FROM "Product";
    
  • 第三步:重置序列
    执行SQL直接将序列重置到符合要求的取值:
    SELECT setval('"Product_id_seq"', (SELECT COALESCE(MAX(id), 0) FROM "Product"));
    
    你也可以用下面的语法实现同样效果:
    ALTER SEQUENCE "Product_id_seq" RESTART WITH (SELECT COALESCE(MAX(id), 0) + 1 FROM "Product");
    
  • 第四步:验证修复
    重置完成后重新执行prisma migrate dev,报错就会消失。如果还存在迁移历史不一致的提示,可以执行prisma migrate resolve --applied <最新迁移文件名>将对应迁移标记为已应用后再重试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:15:01