PostgreSQL:将没有时区的时间戳转换为不工作的特定时区

时间:2016-09-22 10:57:03

标签: database postgresql timezone timestamp-with-timezone

我正在尝试将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。如何指定查询以使用德语时区执行此操作。谢谢。

1 个答案:

答案 0 :(得分: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';

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