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)
  • 使用设置为 UTC 的 PostgreSQL 时的无效时间戳转换 (#1587)
  • 插入到带时区的时间戳会删除毫秒数 (#1061)
  • 更新时间戳字段(使用 AWS Data API) (#1164)
  • 关系查询的无效日期 (#895)
Become a Gold Sponsor