首先修改时区的参数为timezone
如:
<10:28:18><db:postgres><user:postgres><pid:26229>=# show timezone;
TimeZone
───────────────
Asia/Shanghai
(1 row)
如果是自建的数据库,那么修改配置文件postgresql.conf 或者通过数据库命令修改均可以,修改后,只需reload即可。
<10:29:49><db:postgres><user:postgres><pid:26334>=# alter system set timezone TO UTC;
ALTER SYSTEM
<10:30:06><db:postgres><user:postgres><pid:26334>=# select now();
now
───────────────────────────────
2021-07-16 10:30:15.185794+08
(1 row)
<10:30:15><db:postgres><user:postgres><pid:26334>=# select pg_reload_conf();
pg_reload_conf
────────────────
t
(1 row)
<10:30:21><db:postgres><user:postgres><pid:26334>=# select now();
now
───────────────────────────────
2021-07-16 02:30:22.262048+00
(1 row)
如果是RDS,有些平台是无法修改该参数的。这里可以设置role级别的参数,如下:
#这里注意的是,原来已经有的session需要断开重连一下,设置的参数存在于pg_timezone_names视图的name字段中
<10:32:38><db:postgres><user:postgres><pid:26334>=# alter role all set timezone=UTC;
ALTER ROLE
<10:32:56><db:postgres><user:postgres><pid:26334>=# \q
postgres@melot-pgbouncer-pg-> psql
psql (12.6)
Type "help" for help.
<10:33:01><db:postgres><user:postgres><pid:26559>=# select now();
now
───────────────────────────────
2021-07-16 02:33:03.269393+00
(1 row)
#查看db和role级别的设置
<10:33:03><db:postgres><user:postgres><pid:26559>=# select * from pg_db_role_setting ;
setdatabase │ setrole │ setconfig
─────────────┼─────────┼─────────────────────────────────────────────
0 │ 16384 │ {"search_path=repmgr, \"$user\", public"}
16450 │ 0 │ {"search_path=\"$user\", public, topology"}
0 │ 0 │ {TimeZone=utc}
(3 rows)
可以通过以下连个视图查看数据库所支持时区的信息
select * from pg_timezone_abbrevs; --所支持的时区缩写
select * from pg_timezone_names; --可查看支持的时区名称
另外时区支持文件在$PGHOME/share/timezonesets位置