更新Postgres DB中的时区列

时间:2013-12-09 13:51:27

标签: postgresql timezone timestamp

我已开始使用timestamp without timezone创建产品数据库。然后,实现我的错误,我开始使用timestamp with timezone。现在我想把它统一到后者。

问题:现有的已经包含数据的Postgres 8.4数据库是否可以将所有类型为timestamp 的列(不带 TZ)转换为 > TZ?

最好的解决方案是在一次执行中执行此操作的脚本(当然)。即使是一次修复单个列的脚本也会很棒。问题是,在输出中使用它的一些现有VIEW上,一个天真的改变列会失败(虽然我不明白为什么它在这种情况下很糟糕 - 它只是稍微扩大了输出类型)。

1 个答案:

答案 0 :(得分:1)

你希望ALTER TABLE ... ALTER COLUMN ... TYPE ... USING (...)做出你期望的事情。您需要确定这些时间的时区,并为AT TIME ZONE子句提供合适的USING表达式。

这些ALTER将重写每个表,所以允许这样做。您可能希望事后CLUSTER

但是,您似乎认为这两种类型是可以互换的。他们不是。这就是您需要删除并重建视图的原因。此外,您还需要适当地重写任何应用程序。

如果你不明白为什么会有所不同,可以泡一杯热茶或咖啡,坐下来阅读时间&手册的日期部分,花一个小时左右彻底阅读。或许也有一些Q& As。这不是一个微小的改变。在您决定适用的任何时区,我都会特别警惕任何夏令时/夏季班次。