You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL generate_series出现重复2021-03-28 03:00行的原因咨询

PostgreSQL generate_series 出现重复时间显示的原因

这不是PostgreSQL的Bug,是时区夏令时切换导致的预期行为,具体逻辑如下:

  • 时间类型的底层逻辑
    你的查询里,generate_series接收的起始值是date类型,PostgreSQL会自动将其转为timestamp with time zone(简称timestamptz),基于当前服务器/会话的时区计算序列。这类时间戳本质存储的是UTC时间,显示时会转换为本地时区的时间格式。

  • 夏令时切换引发的本地时间重复
    2021年3月28日是部分时区的夏令时结束节点(比如南美部分时区):当夏令时结束时,当地时钟会回拨1小时,这就导致同一个本地时间会对应两个不同的UTC时间。
    举个例子,假设你的服务器时区在3月28日凌晨3点从夏令时切换到冬令时,时钟回拨1小时,那么:

    • UTC时间2021-03-28 04:00:00转本地时间是2021-03-28 03:00:00(夏令时规则)
    • UTC时间2021-03-28 05:00:00转本地时间还是2021-03-28 03:00:00(冬令时规则)
      这两个时间的UTC值完全不同,对应的epoch自然有差异,但转换为本地时间显示时就会出现重复的2021-03-28 03:00:00。
  • 验证差异的方法
    你可以执行以下查询,查看UTC时间和epoch值的差异:

    select 
      date_hour, 
      date_hour at time zone 'UTC' as utc_time, 
      extract(epoch from date_hour) as epoch
    from generate_series('2021-03-28'::date, '2021-03-29'::date - interval '1 minute', interval '1 hour') as date_hour;
    

    结果里会清晰看到两个看似重复的本地时间,对应的UTC时间和epoch值完全不同。

内容的提问来源于stack exchange,提问作者c.bear

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 14:54:24