DrizzleORM v0.30.0 发布
Mar 7, 2024
重大变更
Postgres 时间戳映射已更改,以使所有驱动程序具有相同的行为。
❗ 我们已修改 postgres.js 驱动实例,以始终返回字符串形式的日期,然后 Drizzle 将根据所选的 mode 提供映射日期的字符串。您可能会遇到的唯一问题是,一旦您在 Drizzle 中提供 postgres.js 驱动实例,该对象在日期处理上的行为将始终返回字符串。
我们将此更改作为小版本发布,仅作为警告:
-
如果您在使用时间戳并期待特定响应,现在行为将会改变。 在映射到驱动程序时,我们将始终使用
.toISOString,无论是带时区的时间戳还是不带时区的时间戳。 -
如果您在 Drizzle 之外使用
postgres.js驱动,传递给 Drizzle 的所有postgres.js客户端在日期处理上将具有变异行为。所有的日期将在响应中以字符串格式返回。
针对 postgres.js 的解析器已更改。
const transparentParser = (val: any) => val;
// 重写 postgres.js 默认日期解析器: https://github.com/porsager/postgres/discussions/761
for (const type of ['1184', '1082', '1083', '1114']) {
client.options.parsers[type as any] = transparentParser;
client.options.serializers[type as any] = transparentParser;
}理想情况下,像几乎所有其他驱动程序一样,我们应该能够按查询基础变更映射,这意味着驱动程序客户端不会被变异。我们将与 postgres.js 库的创建者联系,以询问是否可以指定按查询的映射拦截器,从而使这个流程对所有用户更加优化。
如果我们遗漏了这一功能,并且 postgres.js 中已可用,请在 Discord 中联系我!
有关带时区和不带时区的时间戳的更多参考可以在我们的 文档中找到。
有关开始使用 postgres.js 驱动程序和 Drizzle 的文档,请 点击这里。
修复
- 使用模式字符串的时间戳返回为 Date 对象而不是字符串 - (#806)
- 日期始终为日期 (#971)
- 在处理时间戳和相应的 JavaScript 日期时间对象时的不一致性。 (#1176)
- 时间戳列显示为字符串类型,但实际上返回 Date 对象。 (#1185)
- postgres 日期列的数据类型错误 (#1407)
- 使用 PostgreSQL 时区设置为 UTC 时的无效时间戳转换 (#1587)
- Postgres 向带时区的时间戳插入时移除毫秒 (#1061)
- 更新时间戳字段 (使用 AWS 数据 API) (#1164)
- 来自关系查询的无效日期 (#895)