更新Postgres数据库中的时区列



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

问题:在已经包含数据的现有Postgres 8.4数据库中,是否有可能将不带TZ的timestamp类型的所有列转换为带TZ的列?

最好的解决方案是一个脚本,它可以在一次执行中做到这一点(当然)。即使是一个一次修复一列的脚本也会很棒。问题是,在一些在输出中使用该列的现有VIEW上,对该列进行天真的ALTERing会失败(尽管我不明白为什么在这种情况下它很糟糕——它只是稍微扩大了输出类型)。

您想要ALTER TABLE。。。更改列。。。键入。。。正在使用(…),它可以实现您的期望。您需要决定这些时间在哪个时区,并为USING子句提供合适的AT TIME ZONE表达式。

这些ALTER将重写每个表,因此允许这样做。之后您可能需要CLUSTER

然而,你似乎认为这两种类型是可以互换的。事实并非如此。这就是为什么你需要放弃并重建你的观点。此外,您还需要适当地重写任何应用程序。

如果你看不出它们为什么不同,那就泡一杯热茶或咖啡,坐下来阅读时间;在手册的章节上注明日期,花一个小时左右的时间彻底阅读。也许一些问答;就像这里一样。这不一定是一个小改动。我会特别小心你决定申请的任何时区的夏令时/夏令时。

相关内容

  • 没有找到相关文章