SuperAPI AI 工具集

prisma-knowledge-patch

编程与开发

查看项目

更新于 10-16 01:35

技能介绍

用途:该技能帮助开发者采用当前 Prisma ORM 写法、升级旧项目并避免已移除的 API;任务涉及的每个领域都应先阅读对应参考文件。

主要参考文件:client-generation-and-adapters.md(prisma-client、Query Compiler、驱动适配器、运行时目标、客户端构造、缓存行为);extensions-and-observability.md(客户端扩展、事件监听、追踪、SQL 注释、只读副本、指标、驱动错误);prisma-postgres-and-products.md(Prisma Postgres、本地开发、直连、Console、Management API、MCP、Compute、集成);schema-migrations-and-queries.md(Schema 特性、索引、视图、迁移、事务、过滤、批量查询、内省);studio-and-tooling.md(Studio、编辑器集成、bootstrap/init 流程、CLI 输出、大型 Schema);upgrading-and-configuration.md(破坏性升级、Prisma Config、数据源归属、移除的 CLI 输入、环境加载、命令覆盖)。

连接架构:将生成客户端与数据库连接视为两个独立选择——用 provider = "prisma-client" 和显式 output 生成应用自有代码,在 prisma.config.ts 中配置 CLI 数据源,用驱动适配器或 accelerateUrl(Prisma Accelerate)构造 PrismaClient,并在安装、迁移、部署流程中显式运行生成与播种。示例片段:

generator client { provider = "prisma-client" output = "../src/generated/prisma" }

datasource db { provider = "postgresql" }

// prisma.config.ts import 'dotenv/config' import { defineConfig, env } from 'prisma/config'

export default defineConfig({ schema: 'prisma/schema.prisma', migrations: { path: 'prisma/migrations', seed: 'tsx prisma/seed.ts', }, datasource: { url: env('DATABASE_URL'), shadowDatabaseUrl: env('SHADOW_DATABASE_URL'), }, })

import { PrismaPg } from '@prisma/adapter-pg' import { PrismaClient } from './src/generated/prisma/client'

const adapter = new PrismaPg(process.env.DATABASE_URL!) const prisma = new PrismaClient({ adapter })

不要依赖无连接路径的 new PrismaClient()、Schema 级数据源 URL、CLI 自动加载 .env、postinstall 生成,或由迁移触发的生成与播种。

升级检查清单:MongoDB 应用保留在受支持的 Prisma 主版本而非盲目升级;尽可能用 prisma-client 替换 prisma-client-js 并更新导入;规范化适配器导出大小写(PrismaBetterSqlite3、PrismaD1Http、PrismaLibSql、PrismaNeonHttp);移除遗留引擎选择、引擎环境变量、Data Proxy 控制项和已移除的生成器标志;将 CLI 数据源、Schema、迁移与播种配置移入 prisma.config.ts;调用 env() 前显式加载环境变量;替换已移除的 CLI 选项与废弃的 prisma introspect 调用;在原先依赖副作用的工作流中显式添加 prisma generate 与 prisma db seed;改动依赖前确认 Node.js 与 TypeScript 满足当前最低版本。

生成输出:按部署目标使用生成器选项,如 runtime、moduleFormat、generatedFileExtension、importFileExtension、compilerBuild;compilerBuild = "fast" 为速度优先默认值,"small" 以执行速度换更小编译器;运行时名称受限且旧别名已移除,Deno 用 runtime = "deno"。

迁移与 Schema 防护:破坏性重置需显式请求,不能指望 migrate dev 在漂移或应用失败后提供交互式重置;通过受支持的自动化编码环境调用破坏性命令时会多一层确认;PostgreSQL 扩展应在自定义 SQL 迁移中管理而非 postgresqlExtensions;多文件 Schema 时迁移应与数据源 Schema 文件相邻,除非 Prisma Config 另行指定路径;用 tables.external 将外部管理的表设为可查询但排除于迁移;仅当视图数据确实保证唯一性时才声明唯一;部分唯一索引不会生成 findUnique 输入;需在不阻塞写入时构建索引可在 PostgreSQL 迁移 SQL 中使用 CREATE INDEX CONCURRENTLY。

查询能力:可直接使用较新 API,如 updateManyAndReturn、带 limit 的 deleteMany、按查询或全局 omit 排除字段、受支持 JSON 字符串过滤上的 mode: 'insensitive'、SQL 数据库上支持保存点语义的嵌套交互式事务;不要依赖 D1 保存点的回滚语义(其适配器视为空操作);按查询多样性与内存设置 queryPlanCacheMaxSize,设为 0 可禁用缓存;未映射的驱动失败应作为可捕获的 P2039 错误处理;映射枚举成员在生成代码中使用 Schema 名称,@map 只控制数据库表示,不要仅因数据库字符串出现在 Schema 中就直接发送它。

扩展组合:在扩展客户端前注册事件监听器(如 log: [{ emit: 'event', level: 'query' }] 与 $on('query', ...)),再调用 $extends;派生客户端行为隔离但共享基础客户端的连接池;同名成员冲突时最后一个扩展获胜;查询扩展按声明顺序开始;在扩展客户端调用客户端级方法前先确认其存在;不要试图用查询扩展拦截嵌套读写。

产品与工具:prisma studio 支持本地或远程数据库,含关系导航、SQL 工作流、搜索、过滤与多单元格编辑;编辑器扩展用于本地与托管数据库工作流;prisma bootstrap 用于状态感知的 Prisma Postgres 设置,prisma postgres link 链接已有项目,prisma dev 运行本地 Prisma Postgres 实例并显式管理持久实例;标准 PostgreSQL 工具使用直连 PostgreSQL URL,仅在需要时对直连 Prisma Postgres 连接启用池化;Accelerate 视为缓存层,Prisma Postgres 视为池化数据库层。

限制:以上为资料中明确描述的内容;具体版本号、价格、平台支持矩阵等细节本资料未提供。