忽然发现程序数据生成时间和服务器时间对不上?
排查发现:操作系统的时间与数据库的时间也不一致,究其原因是 两者时区不一致造成的!首先需要查改服务器时区和时间,然后查改数据库时区(数据库需求修改配置,否则重启后失效还原成了默认值)
1、查看系统时间与时区
[postgres@ubuntu]$ date
Thu Nov 19 09:39:58 CST 2015
[postgres@ubuntu]$ date -R
Thu, 19 Nov 2015 09:40:33 +0800
[postgres@ubuntu]$ cat /etc/sysconfig/clock
ZONE="Asia/Shanghai"
2、查看pg的时区与时间
postgres=# select now();
now
-------------------------------
2015-11-18 17:42:28.755732-08
(1 row)
--查看时区
postgres=# show time zone;
TimeZone
------------
US/Pacific
--以上可知,主机的时区和系统的时区不一致,造成两者相差16个小时
--修改时区,注意此默认为session级别(重启后会失效)
postgres=# set time zone 'PRC';
SET
postgres=# select now();
now
-------------------------------
2015-11-19 09:44:50.178039+08
(1 row)
postgres=# show time zone;
TimeZone
----------
PRC
--视图pg_timezone_names保存了所有可供选择的时区
select * from pg_timezone_names;
--查看配置文件中时区设置,要想永久生效,此时需要修改配置文件
[postgres@ubuntu]$ grep timezone postgresql.conf
log_timezone = 'PRC'
timezone = 'PRC'
--修改完配置时重新加载
[postgres@ubuntu ~]$ pg_ctl reload
server signaled
[postgres@ubuntu ~]$ psql
postgres=# show time zone;
TimeZone
----------
PRC