【发布时间】:2019-01-02 08:11:12
【问题描述】:
假设我的 PostgreSQL 数据库中存储了一个带有时区的时间戳。像这样的:
2003-04-12 04:05:06.814191 America/New_York
在读取这些数据时,数据库会返回调整后的 GMT 时间以标准化所有读取的时间戳,还是直接按原样返回?
我问这个问题的原因是我创建了一个包含记录的表,其中每条记录都有一个时间戳列。我继续为不同的记录提供不同的时区。当我查询此表并尝试按时间戳列排序时,时区似乎对排序没有任何影响。这是设计使然吗?
我的结果示例:
1954-06-27 08:44:01.963454 Asia/Baghdad
1954-06-27 08:44:01.963454 GMT
1954-06-27 08:44:01.963454 Europe/Paris
1954-06-27 08:44:01.963454 Asia/Baghdad
1954-06-27 08:44:01.963454 America/New_York
1954-06-27 08:44:01.963454 America/New_York
1954-06-27 08:44:01.963454 America/New_York
1954-06-27 08:44:01.963454 GMT
1954-06-27 08:44:01.963454 America/New_York
1954-06-27 08:44:01.963454 America/New_York
1954-06-27 08:44:01.963454 Europe/Paris
1954-06-27 08:44:01.963454 America/New_York
1954-06-27 08:44:01.963454 Asia/Dhaka
1954-06-27 08:44:01.963454 GMT
1954-06-27 08:44:01.963454 GMT
1954-06-27 08:44:01.963454 Asia/Damascus
1954-06-27 08:44:01.963454 GMT
1954-06-27 08:44:01.963454 Asia/Damascus
1954-06-27 08:44:01.963454 America/New_York
1954-06-27 08:44:01.963454 Asia/Dhaka
1954-06-27 08:44:01.963454 Asia/Baghdad
1954-06-27 08:44:01.963454 Europe/Paris
1954-06-27 08:44:01.963454 Europe/Paris
1954-06-27 08:44:01.963454 Asia/Baghdad
1954-06-27 08:44:01.963454 Asia/Baghdad
所有这些记录的日期和时间都相同,不同的时区对排序没有影响。
为了更清楚,我实际上将这些时间戳作为字符串存储在名为 data 的 JSONb 列中,键为 datetime,即:
data = {
"datetime" : "2003-04-12 04:05:06.814191 America/New_York",
.....
}
在排序和过滤期间,我将其转换为时间戳。像这样的:
"(data->>'datetime')::timestamp"
【问题讨论】:
-
没有时区数据与
TIMEZONETZ类型相关联——它只是一个瞬间。你能展示你是如何插入/选择你的示例数据的吗? -
@teppic :抱歉,我之前忘了提一个重要细节。更新了问题。
-
如果你投射到
timestamp,这意味着timestamp without time zone,而不是timestamp with time zone。
标签: postgresql datetime