0

我设置了一个安装在中央时区服务器上的 postgres 数据库,因此所有时间戳列都在中央时区。

postgres 中有没有办法将数据库中的所有时区列从 CST 更改为 GMT?将数据库配置为使用 GMT 是最佳实践吗?

4

1 回答 1

1

好吧,最佳做法是避免使用TIMESTAMP对时区一无所知的类型,并始终使用TIMESTAMPTZ(缩写TIMESTAMP WITH TIME ZONE)类型来存储您的时间戳。

TIMESTAMPTZ存储时间戳UTC和最初写入时间戳的时区(如CST,PSTGMT+6)。这使您可以始终正确地操作和显示这些列,无论当前服务器或客户端时区设置是什么。

您应该能够使用以下方式将现有的 TIMESTAMP 列转换为 TIMESTAMPTZ:

ALTER TABLE mytable ALTER COLUMN old_tstamp TYPE TIMESTAMPTZ

在执行此操作之前,您应该在小型数据集或小型测试表上进行试验,以了解从 TIMESTAMP 到 TIMESTAMPTZ 的转换如何真正为您工作,以便将时区信息保留在您的数据中。

如果转换无法正常工作,您可以使用如下语句临时设置当前会话的时区(仅用于转换目的ALTER TABLE ... COLUMN ... TYPE):

SET timezone TO 'CST6CDT';

或者

SET timezone TO 'UTC+6';

这将影响后续的操作和从TIMESTAMPto 的转换TIMESTAMPTZ——只要确保它正确。

将所有时间戳转换为 后TIMESTAMPTZ,服务器或客户端时区设置(默认为当前操作系统时区设置)仅用于显示目的,因为数据操作将始终正确。

于 2013-02-20T10:56:26.707 回答