如何将postgres数据库从CST转换为GMT?

时间:2013-02-20 07:48:52

标签: postgresql

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

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

1 个答案:

答案 0 :(得分:1)

嗯,最佳做法是避免使用对时区不了解的TIMESTAMP类型,并始终使用TIMESTAMPTZTIMESTAMP WITH TIME ZONE的缩写)类型来存储时间戳。

TIMESTAMPTZ存储UTC中的时间戳和最初写入时间戳的时区(如CSTPSTGMT+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';

这会影响从TIMESTAMPTIMESTAMPTZ的后续操作和转化 - 只需确保正确。

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