在PostgreSQL中存储日期数组(无时间)
我正在尝试将日期(没有时间)存储在 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 ] } ]。