Prisma 中带有时区列的时间戳

mad*_*low 11 prisma

我正在评估 Prisma,我是一个十足的菜鸟......

  • 我正在使用 Postgresql
  • 我有以下模型定义
model Sth {
  id                 Int       @default(autoincrement()) @id
  createdAt          DateTime  @default(now())
  updatedAt          DateTime  @updatedAt
  expiresAt          DateTime?
}
Run Code Online (Sandbox Code Playgroud)

createdAt专栏翻译为

createdAt | timestamp(3) without time zone | | not null | CURRENT_TIMESTAMP

因为我打算真正使用时间戳 - 我需要它们timestamp with time zone

我如何使用 Prisma 实现这一目标?

编辑 NOW() > '2021-02-16':Prisma 现在具有“本机类型”

Hed*_*ges 28

对于我们这些生活在未来的人来说,现在可以通过 Prisma 的“本机数据库类型属性”为 postgresql 保存带有时间戳和时区的记录。

https://www.prisma.io/docs/reference/api-reference/prisma-schema-reference#postgresql-6

请注意,对于我的数据库,我必须将时区设置为'UTC',以便将正确的时区设置为我想要的时区@default

上面的示例使用了 Native 数据库类型属性。

model Sth {
  id                 Int       @default(autoincrement()) @id
  createdAt          DateTime  @default(now()) @db.Timestamptz(3)
  updatedAt          DateTime  @updatedAt @db.Timestamptz(3)
  expiresAt          DateTime? @db.Timestamptz(3)
}
Run Code Online (Sandbox Code Playgroud)

  • (3) 是什么意思?文档似乎也没有说,只是称之为“x”。根据ChatGPT,它的意思是精度,范围从0到6,其中3是毫秒,6是微秒。PostgreSQL 默认为 6。Prisma 中可以省略精度吗? (7认同)
  • @Eloff它与毫秒舍入的精度有关。我没有在这方面做过任何实验,但我的假设是,如果省略它,并且 postgresql 的版本默认为 6,那么他们会看到一个带有 6 位小数的时区的时间戳。根据过去的经验,Prisma 不会扰乱数据库默认设置,除非文档中有说明。请分享您的经验! (3认同)

Rya*_*yan 6

目前timestamptz不支持该字段,因为 Prisma 会自动将您发送的时间戳转换为 UTC。通过此请求,将在 Prisma 的进一步版本中提供支持。

作为解决方法,您需要将时间戳转换为特定的所需时区,因为 Prisma 会将其以 UTC 格式保存在数据库中。