有什么方法可以让 Postgres 在全球范围内自动使用正确的 ISO 8601 时间戳?

问题描述

据我所知,Postgres 10.12 没有为我的 timestamptz 列使用正确的 ISO 8601 时间戳:2021-03-21 00:23:18.587565

根据 ISO 8601:

单个时间点可以通过连接完整的日期表达式、作为分隔符的字母“T”和有效的时间表达式来表示。例如,“2007-04-05T14:30”。在 ISO 8601:2004 中,允许通过双方协议省略“T”字符,如“200704051430”,但该规定在 ISO 8601-1:2019 中被删除。 ISO 8601 不允许将日期和时间部分与其他字符(例如空格)分开,但在其配置文件 RFC 3339 中是允许的。1

有什么办法可以全局配置它,以便获得 YYYY-MM-DDThh:mm:ss.xxxZ 格式的时间戳?我当前的解决方法是每次我想要时间戳时都像这样查询

SELECT to_json(created_at) #>> '{}' AS created_at FROM items

这很乏味,更喜欢全局选项。

解决方法

PostgreSQL 中没有办法在 datestyle 参数之外配置时间戳的字符串表示,它只提供了几个固定的替代方案。

最好的建议是将 to_char 与适当的格式字符串一起使用。