返回

在PostgreSQL中存储日期数组(无时间)

发布时间:2022-08-01 19:44:00 377
# 数据库

我正在尝试将日期(没有时间)存储在 PostgreSQL 数组中。

就上下文而言,假设这些是超市关闭的日期:

['2022-12-24', '2022-12-25', '2022-12-26']

该表被调用opening_times,并且有一个名为的列closed_days,其类型为date[]:

table.specificType('closed_days', 'date[]').defaultTo([]).notNullable()

但是,当我UPDATE使用这个字段时SET closed_days = '{"2022-10-16"}',似乎 PostgreSQL 正在将其转换为完整的 ISO 日期和时间字符串,如下所示:["2022-10-15T23:00:00.000Z"]

根据 PostgreSQL 文档(第 8.5 节),该date类型的分辨率应该为 1 day,但不知何故它仍在存储时间。在数据库的其他地方,类型字段date确实具有 1 天的粒度(不存储时间),但在这些情况下,我没有使用数组。

--

附加信息

我在 Docker 容器内运行 PostgreSQL 14.2(psql也在容器内运行)

Beekeeper Studio 中列的类型显示为_date,但您可以看到上面用于使用 type 创建字段的 ORM 代码date[],所以我认为_date这只是相同的另一种表示法。

在psql中,运行\d opening_times显示该列的类型为date[]。

结果select array['2022-07-28'::date]是["2022-07-27T23:00:00.000Z"]在 Beekeeper Studio 中运行时。在运行相同的查询时,psql我得到{2022-07-28}. 当我在 Lucid ORM 中运行它时:

const db = await Database.rawQuery("select array['2022-07-28'::date]")

console.log(db.rows)

我明白了:[ { array: [ 2022-07-27T23:00:00.000Z ] } ]。

特别声明:以上内容(图片及文字)均为互联网收集或者用户上传发布,本站仅提供信息存储服务!如有侵权或有涉及法律问题请联系我们。
举报
评论区(1)
按点赞数排序
用户头像