奥罗拉 DSQL 用于 Prisma 的工具
用于使用的 CLI 工具 Prisma ORM 软件 与 亚马逊·奥罗拉 DSQL。 。 。 .
概览
本套件提供:
- Schema 校验器 - 为DSQL兼容性验证 Prisma 计划
- 迁移变换器 - 使用 DSQL 兼容的 SQL 转换 Prisma 迁移
dsql-lint - 迁移线条 - 检查 SQL 迁移的 DSQL 兼容性而不修改它们
- 全能迁移命令 - 一步步验证、生成和变换
奥罗拉DSQL有 特定的 PostgreSQL 兼容性限制。这些工具帮助您及早抓住问题,并实现所需转变的自动化.
安装
npm install --save-dev @aws/aurora-dsql-prisma-tools
支持的Node.js版本 : 20+ (活性及活性TS释放)
@aws/dsql-lint 包含使用 npm 的 latest ditt-tag 并使用其捆绑
二进制默认( 不需要设置) 。 新的依赖分辨率安装
当前发布; 已存在的锁文件将记录的版本保存到
依赖更新或重新生成锁文件 。 使用习惯或
已安装, 设置 DSQL_LINT_PATH。 。 。 .
快速启动
在一个命令中生成一个 DSQL 兼容的迁移 :
npx aurora-dsql-prisma migrate prisma/schema.prisma -o prisma/migrations/001_init/migration.sql
如果验证失败, 请修复您的方案并重新运行 .
图标
验证Schema
在运行时间前检查您的 Prisma 计划是否兼容 :
npx aurora-dsql-prisma validate prisma/schema.prisma
校验器检查什么
校验器从您的方案生成 SQL 和代表符兼容性检查
改为 dsql-lint --fix, (中文(简体) ),
改变迁移的相同路径。 可变的 SQL 通道验证
有建议; 无法修复的 SQL 失败 . relationMode = "prisma" 仍然有用
自动迁移,但不再是强制性的.
示例输出
⚠ Column `"id"` uses SERIAL, which is not supported in DSQL.
→ Replaced SERIAL with a DSQL-compatible identity column.
✓ Validation passed with 1 advisory
转变移徙
变换 Prisma 生成的迁移为 DSQL 兼容 :
# Transform from file
npx aurora-dsql-prisma transform raw.sql -o migration.sql
# Transform using pipes (stdin)
npx prisma migrate diff \
--from-empty \
--to-schema prisma/schema.prisma \
--script | npx aurora-dsql-prisma transform > migration.sql
变形器会做什么
转换命令使用 dsql-lint --fix 以应用 DSQL 兼容性修正。 见 dsql-lint 读取 为规则和转变的完整列表.
交易
Aurora DSQL允许每次交易一个 DDL 语句. transform 设置 DDL
单项发言 BEGIN编号 :COMMIT 区块 prisma migrate deploy,哪个
可以将文件运行为一个交易。 数据变化与 DDL 分开运行;
相邻数据变化共享交易。 将大数据变化分开
在DSQL范围内的迁移 交易限制。 。 。 .
如果声明失败,仍适用先前承诺的更改。 如果 Prisma 报告
仅限 current transaction is aborted,运行第一个未应用区块 psql
或者说 npx prisma db execute 寻找原因 那就修补一下
解决失败的迁移。 。 。 .
拆分产生一个咨询: transform 写 SQL 有代码的退出
3· ; migrate 登录带有代码的咨询和退出 0。 。 。 .
单一报表和仅数据文件不需要分割.
包含的文件 COMMIT, (中文(简体) ), ROLLBACK,或交易范围设置
作为 SET LOCAL,将每个 DDL 语句放入自己的交易并重复任何
需要设置. transform 不为这些文件添加交易块,
不过 dsql-lint 可以分割已存在的块,结束其交易范围设置.
如果任何陈述都不属于这些文件中明确交易的范围, transform
报告为何跳出并用代码退出 3。其发言的文件
所有交易都是明确的,但没有得到这种补充建议.
手写迁移时,各放 CREATE ROLE, (中文(简体) ), CREATE DOMAIN, (中文(简体) ), GRANT, (中文(简体) ),
或者说 COMMENT ON 声明本身 BEGIN编号 :COMMIT 块. dsql-lint 已经
不将这些报表分割为单独的交易.
林特移徙
检查 SQL 迁移文件, 以获取 DSQL 兼容性而不应用修正 :
npx aurora-dsql-prisma lint migration.sql
使用 transform 部署前: lint 检查 SQL 兼容性,但不兼容
将文件作为单笔交易运行.
全能移动
一步步验证、生成和变换:
npx aurora-dsql-prisma migrate prisma/schema.prisma -o prisma/migrations/001_init/migration.sql
关于利用现有数据库进行增量迁移:
npx aurora-dsql-prisma migrate prisma/schema.prisma \
-o prisma/migrations/002_add_column/migration.sql \
--from-config-datasource
递增移徙
初始部署后,请使用 --from-config-datasource 生成只包含与实时数据库差异的迁移:
npx aurora-dsql-prisma migrate prisma/schema.prisma \
-o prisma/migrations/002_add_email/migration.sql \
--from-config-datasource
这需要 prisma.config.ts 提供数据库证书。 见 实例 (a) 执行工作.
处理不支持的语句
Prisma 生成创建后外国密钥 ALTER TABLE ... ADD CONSTRAINT奥罗拉DSQL需要 NOT VALID 这些限制,所以
dsql-lint 保存外国密钥并添加 NOT VALID。运行后
transform中,添加以下块以验证已存在的行,或将其放入
单独迁移。 在变换前添加它 阻止变压器
将剩余发言包起来:
BEGIN;
ALTER TABLE ASYNC "table_name" VALIDATE CONSTRAINT "constraint_name";
COMMIT;
变换出口有代码 3 以确保您审查并添加验证
语句。 约束立即适用于新写作, 但已有行
在同步工作完成之前,保持无效.
Prisma Schema 要求
当使用 Aurora DSQL 时:
-
选择关系模式数字 :
datasource db { provider = "postgresql" relationMode = "prisma" }使用
relationMode = "prisma"应用程序何时模拟 优惠诚信. 要使用本地的 DSQL 外国密钥, 请省略 。 奥罗拉 DSQL 支持NoAction, (中文(简体) ),Restrict, (中文(简体) ),Cascade, (中文(简体) ),SetNull,以及SetDefault。 。 。 . 创作后的限制改为:NOT VALID; 添加 相应ALTER TABLE ASYNC ... VALIDATE CONSTRAINT发言前 应用迁移.分层动作算向 Aurora DSQL 的交易行修改 限制。 偏爱
NoAction或者说Restrict儿童占多数的地方 未绑定,通过重试处理进行交易,因为外国钥匙 冲突可以作为序列化失败而出现. -
对ID使用UUID数字 :
model User { id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid } -
禁用咨询锁定 - 迁移时:
PRISMA_SCHEMA_DISABLE_ADVISORY_LOCK=1 npx prisma migrate deploy
Aurora DSQL SQL 兼容性细节的完整列表,请参见: PostgreSQL 兼容性参考。 。 。 .
示例
见 实例/技术应用/ 包括:
- 与 DSQL 兼容的 Prisma 方案
- 带有自动IAM认证的 DsqlPrisma 客户端
- CRUD 样本操作
- 融合测试
额外资源
警卫
见 捐款 更多信息.
许可证
这个项目根据Apache-2.0许可证获得许可证.