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

PostgreSQL插入TIMESTAMP WITHOUT TIME ZONE值异常求助

解决PostgreSQL中无时区时间戳被自动修改的问题

问题原因

尽管你使用的是TIMESTAMP WITHOUT TIME ZONE类型,但插入字符串格式的时间时,PostgreSQL会依据当前客户端会话的时区解析该字符串,再转换为无时区时间戳存储。2025年3月9日是北美夏令时(EST转EDT)切换日,凌晨2点会直接跳至3点,这个时间在EST/EDT时区中不存在,因此PostgreSQL会自动将其调整为下一个有效时间(3:34:56)。

解决方案

  • 强制解析为无时区纯时间值
    插入时使用TIMESTAMP关键字明确指定这是一个无时区的时间戳,跳过客户端时区的转换逻辑:

    INSERT INTO PATIENT (A) VALUES (TIMESTAMP '2025-03-09 02:34:56');
    
  • 临时切换客户端会话时区
    在插入数据前,将会话时区设置为UTC(或无夏令时切换的时区),避免夏令时调整影响解析:

    SET TIME ZONE 'UTC';
    INSERT INTO PATIENT (A) VALUES ('2025-03-09 02:34:56');
    -- 可选:插入完成后恢复原时区
    SET TIME ZONE 'America/New_York';
    
  • 改用带时区的时间戳类型(业务允许时)
    如果需要明确绑定患者所在地时区,可改用TIMESTAMP WITH TIME ZONE类型,插入时指定对应时区,确保时间准确存储:

    -- 修改表结构(若允许)
    ALTER TABLE PATIENT ALTER COLUMN A TYPE TIMESTAMP WITH TIME ZONE;
    -- 插入时指定患者所在地时区
    INSERT INTO PATIENT (A) VALUES ('2025-03-09 02:34:56 America/New_York');
    

内容的提问来源于stack exchange,提问作者Joe DiNottra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 00:48:16