我已开始使用timestamp without timezone
创建产品数据库。然后,实现我的错误,我开始使用timestamp with timezone
。现在我想把它统一到后者。
问题:现有的已经包含数据的Postgres 8.4数据库是否可以将所有类型为timestamp 的列(不带 TZ)转换为 > TZ?
最好的解决方案是在一次执行中执行此操作的脚本(当然)。即使是一次修复单个列的脚本也会很棒。问题是,在输出中使用它的一些现有VIEW上,一个天真的改变列会失败(虽然我不明白为什么它在这种情况下很糟糕 - 它只是稍微扩大了输出类型)。
答案 0 :(得分:1)
你希望ALTER TABLE ... ALTER COLUMN ... TYPE ... USING (...)做出你期望的事情。您需要确定这些时间的时区,并为AT TIME ZONE
子句提供合适的USING
表达式。
这些ALTER
将重写每个表,所以允许这样做。您可能希望事后CLUSTER
。
但是,您似乎认为这两种类型是可以互换的。他们不是。这就是您需要删除并重建视图的原因。此外,您还需要适当地重写任何应用程序。
如果你不明白为什么会有所不同,可以泡一杯热茶或咖啡,坐下来阅读时间&手册的日期部分,花一个小时左右彻底阅读。或许也有一些Q& As。这不是一个微小的改变。在您决定适用的任何时区,我都会特别警惕任何夏令时/夏季班次。