我们在此版本引入了大量更改,某些功能肯定会出现兼容性问题。如果遇到任何问题,您可以降级到版本
1.0.0-beta.1或0.44.7,并请在 GitHub 或我们的 Discord 上反馈问题!
别忘了查看
1.0.0-beta.1版本的更新说明:https://github.com/drizzle-team/drizzle-orm/blob/beta/changelogs/drizzle-orm/1.0.0-beta.1.md
查看 RQBv1 到 RQBv2 迁移步骤的迁移指南:https://orm.drizzle.team/docs/relations-v1-v2
查看新的 RQBv2 架构文档:https://orm.drizzle.team/docs/relations-v2
查看新的 RQBv2 查询文档:https://orm.drizzle.team/docs/rqb-v2
新功能
MSSQL 方言
Drizzle 当前支持 MSSQL 语法,涵盖了 drizzle-orm、drizzle-kit 和 drizzle-seed 包。支持大部分列类型、查询构造器功能、迁移策略等。
唯一还不支持的功能是 RQBv2
// 确保安装了 'mssql' 包
import { drizzle } from 'drizzle-orm/node-mssql';
const db = drizzle(process.env.DATABASE_URL);
const result = await db.execute('select 1');// 确保安装了 'pg' 包
import { drizzle } from 'drizzle-orm/node-mssql';
// 你可以指定 mssql 连接选项里的任意属性
const db = drizzle({
connection: {
connectionString: process.env.DATABASE_URL,
ssl: true
}
});
const result = await db.execute('select 1');CockroachDB 方言
Drizzle 当前支持 CockroachDB,涵盖了 drizzle-orm、drizzle-kit 和 drizzle-seed 包。支持大部分列类型、查询构造器功能、迁移策略等。
唯一还不支持的功能是 RQBv2
// 确保安装了 'pg' 包
import { drizzle } from 'drizzle-orm/cockroach';
const db = drizzle(process.env.DATABASE_URL);
const result = await db.execute('select 1');// 确保安装了 'pg' 包
import { drizzle } from 'drizzle-orm/cockroach';
// 你可以指定 node-postgres 连接选项里的任意属性
const db = drizzle({
connection: {
connectionString: process.env.DATABASE_URL,
ssl: true
}
});
const result = await db.execute('select 1');关系查询部分 (Relational Query Parts)
如果你需要将关系配置拆分成多个部分,可以使用 defineRelationsPart 辅助函数
import { defineRelations, defineRelationsPart } from 'drizzle-orm';
import * as schema from "./schema";
export const relations = defineRelations(schema, (r) => ({
users: {
invitee: r.one.users({
from: r.users.invitedBy,
to: r.users.id,
}),
posts: r.many.posts(),
}
}));
export const part = defineRelationsPart(schema, (r) => ({
posts: {
author: r.one.users({
from: r.posts.authorId,
to: r.users.id,
}),
}
}));然后可以将它们传递给数据库实例
const db = drizzle(process.env.DB_URL, { relations: { ...relations, ...part } })Folders v3 迁移
相关讨论:https://github.com/drizzle-team/drizzle-orm/discussions/2832
我们更新了迁移文件夹结构,主要有:
- 删除了 journal.json 文件
- 将 SQL 文件和快照分组到单独的迁移文件夹里
- 移除了
drizzle-kit drop命令
这些改动避免了 journal 文件产生潜在的 Git 冲突,并简化了删除或修复冲突迁移的流程。
在后续的 beta 版本中,我们将加入交换律检查,帮助指导团队处理迁移冲突,检测可能的冲突点,并给出解决建议。
交换律讨论:https://github.com/drizzle-team/drizzle-orm/discussions/5005
将之前的文件夹迁移到新格式,您可以执行以下命令:
drizzle-kit up全新重写的 drizzle-kit
架构重写,旨在解决主要的 kit 和迁移问题。我们完成了一系列有价值且必要的更新,帮助加速迭代、提升测试覆盖率并增强整体稳定性。
主要工作总结:
- 从数据库快照迁移为数据库 DDL 快照
- 重构了用于检测和应用差异的整个架构
- 对默认值、表达式和类型检测进行了显著改进
- 通过减少数据库调用和简化查询,将模式反射时间从 10 秒降低到不足 1 秒
- 增加了查询提示和 push 的 explain 支持
- 扩展了测试覆盖范围——每个测试案例现支持多达 6 种不同场景(例如 push+push、pull+generate 等)
新增 drizzle-kit pull --init
该命令会在数据库中创建 drizzle 迁移表,并将首次拉取的迁移标记为已应用,从而让你可以基于此继续迭代。
schemaFilter 行为更新
drizzle-kit 开始管理代码中定义的所有 schema。如果你想过滤它们,可以使用 schemaFilter。
之前,默认只管理 public schema,除非显式添加更多 schema 到 schemaFilter。
现在它还支持通配符模式,允许你按任意方式过滤 schema。
.enableRLS() 弃用
之前在 PostgreSQL 表上启用行级安全 (RLS),需要这样写:
// 旧语法
pgTable('name', {}).enableRLS()这一选项现已迁移到新位置
pgTable.withRLS('users', {});列上直接设定别名
你现在可以简单地为列添加 as 别名:
const query = db
.select({ age: users.age.as('ageOfUser'), id: users.id.as('userId') })
.from(users)
.orderBy(asc(users.id.as('userId')));MySQL 新增列类型
新增了以下几种 MySQL 列类型:
- blob: https://orm.drizzle.team/docs/column-types/mysql#blob
- tinyblob: https://orm.drizzle.team/docs/column-types/mysql#tinyblob
- mediumblob: https://orm.drizzle.team/docs/column-types/mysql#mediumblob
- longblob: https://orm.drizzle.team/docs/column-types/mysql#longblob
其他更新和修复
- 修复了 node-postgres 事务中 pg-native Pool 的检测问题
- 允许在 select 字段中使用子查询
- 修正了错字 algorythm => algorithm
- 修复
$onUpdate无法处理SQL值的问题(修复了 #2388,测试由 L-Mario564 在 #2911 实现) - 修复
pg映射器未处理bun-sql:postgresql驱动返回的date、timestamp类型里的Date实例的问题(修复了 #4493)
修复的 Bug
该列表尚不完整,我们仅整理了部分问题。未来几周内还会持续更新。
-
[BUG]: VARCHAR 列更改为 CITEXT(自定义类型)时生成
"undefined"."citext"而非"citext" -
[BUG]: drizzle-kit / Amazon Aurora DSQL:
drizzle-kit push在重应用时尝试删除主键索引,且无任何更改 -
[BUG]: bunx drizzle-kit push 在版本 ^0.31.4 中卡在“Reading config file”
-
[BUG]: drizzle-kit pull 未正确对 gen_random_uuid() 进行 sql 函数包装,导致语法错误
-
[BUG]:
drizzle-kit pull生成的 TypeScript 方案损坏(似乎忘记从 drizzle-orm/mysql-core 导入tinyint) -
[BUG]: 查询 include relations 时,如果关联表含 jsonb 字段,SQLite 报错 JSON 无法保存 BLOB
-
[MySQL] drizzle kit 针对带 fsp 的 timestamp 生成无效 SQL 语法的 onUpdateNow
-
[BUG]: drizzle-kit 当 uniqueIndex 与 sql.lower 一起使用时触发 _ZodError
-
[BUG]: drizzle-kit introspect 报 TypeError: Cannot read properties of null (reading ‘camelCase’)
-
[BUG]: BigInt 在
default(0n)指令中出现 “Do not know how to serialize a BigInt” 错误 -
[BUG]: relational 查询时 findFirst 和 findMany 的 extras 中
mapWith不生效 -
[BUG]: planetscale 在 timestamp 指定 FSP 时 now() 和 current_timestamp() 不生效