【问题标题】:PostgreSQL : Converting timestamp without time zone to a specific timezone not workingPostgreSQL:将没有时区的时间戳转换为特定时区不起作用
【发布时间】:2023-03-03 06:28:20
【问题描述】:

我正在尝试将 Postgres 中的列从 Timestamp without time zone 迁移到 timestamp with time zone。我想在德国时间做,所以我使用了以下查询:

alter table table_name alter column uploaddate type TIMESTAMP WITH TIME ZONE USING uploaddate at time zone 'UTC+01:30';

不幸的是,它不起作用,它正在添加2015-06-30 07:30:48.785+05:30。我目前在印度,+5.30。如何指定查询以使用德国时区执行此操作。谢谢你。

【问题讨论】:

    标签: database postgresql timezone timestamp-with-timezone


    【解决方案1】:

    表中存储的时间戳的时区是什么?即如果表中有2016-09-22 07:30这样的值,那么07:30是在哪个时区?这是您要使用的时区,而不是您当前的本地时区。所以例如如果所有时间戳都以德国时区表示,您应该执行以下操作:

    alter table table_name
    alter column uploaddate type TIMESTAMP WITH TIME ZONE
    USING uploaddate at time zone 'Europe/Berlin';
    

    不要忘记您可以在事务中运行上述内容,以便在提交结果之前检查结果(当然这会锁定整个表并阻止该表的所有其他并发查询)。

    【讨论】:

    • 我怎样才能确认这一点,因为即使在这样做之后,它显示我 +5.30。我有备份,所以我只是替换它。
    • 你的意思是转换之后,如果你运行一个select查询,它会打印一个+5.30的偏移量?如果是这样,那不是问题,这仅与 psql 如何打印时间戳有关,与 postgresql 如何存储它们无关。您可以执行SET TIME ZONE 'Europe/Berlin',然后同一会话中的所有后续查询将以德语时间的文本表示形式打印时间戳。
    • 最后一个问题,如何查看在 pgadmin 中或通过 PSQL 设置的时间戳?
    • 您可以简单地运行查询SHOW TIME ZONE;'
    • 非常感谢您的帮助。
    猜你喜欢
    • 2014-02-12
    • 2021-12-18
    • 2017-04-25
    • 1970-01-01
    • 1970-01-01
    • 2018-07-10
    • 2015-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多