如何基于SQL view创建Prisma模型及prisma introspect能否生成Postgres视图模型
问题1:是否可以使用prisma introspect命令为Postgres数据库中的视图自动生成对应模型?
可以,Prisma 3.10.0及以上版本已经原生支持对PostgreSQL视图的自检功能,prisma introspect(现在官方推荐使用别名prisma db pull)会自动识别数据库中的视图并生成对应的Prisma模型。
需要注意默认生成的视图模型会自带@@ignore注解,Prisma会默认忽略该模型的客户端生成,你需要手动删除该注解后才能正常使用视图模型。
问题2:如何基于SQL视图创建对应的Prisma模型?
你可以选择自动生成后调整,也可以手动编写模型,两种方式的操作步骤如下:
方式1:基于自检自动生成
- 首先确保你使用的Prisma CLI版本≥3.10.0
- 在PostgreSQL数据库中提前创建好目标SQL视图
- 执行命令
prisma db pull完成数据库自检 - 打开生成的
schema.prisma文件,找到对应视图的模型,删除默认添加的@@ignore注解 - 给模型添加唯一标识符:每个Prisma模型都要求存在唯一主键,你可以给视图中唯一非空的字段添加
@id注解,也可以组合多个唯一字段用@@id([字段1, 字段2])的形式定义联合主键 - 执行
prisma generate生成Prisma客户端,之后就可以像操作普通表一样查询视图数据
方式2:手动编写模型
- 先确认你的SQL视图所有返回字段的名称、类型、是否为空的属性
- 在
schema.prisma中新增模型,模型名可自定义,建议和视图名保持语义一致 - 逐个定义模型字段,字段属性要和视图返回结果完全匹配
- 给模型添加主键定义,规则和自动生成场景的要求一致
- 给模型添加
@@map("数据库中实际的视图名称")注解,完成模型名到实际视图名的映射 - 执行
prisma generate生成客户端即可使用
注意:Prisma的迁移工具不会自动管理视图的变更,如果你需要把视图纳入迁移版本管理,需要手动在生成的迁移SQL文件中编写
CREATE VIEW、ALTER VIEW等视图操作语句。另外视图默认是只读的,如果你需要通过Prisma对视图做写入操作,需要提前在PostgreSQL中为视图编写对应的INSTEAD OF触发器,否则写入操作会直接报错。
内容的提问来源于stack exchange,提问作者user3545726
相关产品推荐
相关产品推荐

