如何在Prisma中为多表创建共用序列字段(PostgreSQL)
解决Prisma自动删除共用序列及默认值的问题
核心原因
Prisma 基于 Schema 文件生成迁移,若手动在迁移中添加序列和字段默认值,但未在 Schema 里显式定义关联关系,Prisma 会将这些视为「额外的数据库变更」,在下一次迁移时自动清理。
具体解决方案
在 Prisma Schema 中显式绑定序列与默认值
给需要使用共用序列的字段添加@default(dbgenerated("nextval('global_custom_id_sequence')"))定义,让 Prisma 识别该默认值依赖数据库序列,示例:model Section { id Int @id @default(autoincrement()) // 其他字段... custmId Int? @default(dbgenerated("nextval('global_custom_id_sequence')")) }其他共用该序列的表,按同样方式定义对应字段。
保留合法的手动迁移文件
保留你手动创建的包含CREATE SEQUENCE和字段默认值设置的迁移文件,确保语句完整。后续运行迁移时,Prisma 会对比 Schema 与数据库状态,不会再生成删除序列和默认值的语句。删除自动生成的错误迁移
若已生成包含DROP SEQUENCE和DROP DEFAULT的迁移文件,直接删除该文件(不要执行),修正 Schema 后再重新生成或调整迁移。
补充说明
如果使用 PostgreSQL 以外的数据库,需调整 dbgenerated 内的语法适配对应数据库的序列调用方式,核心逻辑不变:让 Prisma 通过 Schema 感知序列与字段的关联,避免将其视为无用对象清理。
内容的提问来源于stack exchange,提问作者Yuri Shust
相关产品推荐
相关产品推荐

