引言
PostgreSQL 数据库的时区设置,直接关系到时间相关数据的正确存储、处理与显示。默认情况下,PostgreSQL 通常采用 UTC 或其他时区,这容易导致日志时间戳、时间函数返回值与本地时间对不上号,给开发和运维带来不少麻烦。

那么,如何把 PostgreSQL 的时区改成中国时区(Asia/Shanghai)?下面介绍两种方法:一种是临时修改,会话或重启后失效;另一种是永久修改,一劳永逸。你可以根据实际需求灵活选择。
1. 临时修改(数据库重启后失效)
如果你只是想临时看一下中国时区下的效果,或者只是当前会话需要,可以在 psql 命令行中直接执行这条命令,立即生效:
SET log_timezone TO 'Asia/Shanghai';
不过要记住,这个修改只对当前会话有效,一旦数据库重启,就会恢复原样。
2. 永久修改(修改配置文件)
真正的治本之策,是修改配置文件。这样即使数据库重启,时区也会稳稳地保持在中国时区。下面分四步走。
第一步:确认当前设置
先登录数据库,看看当前的时区是什么情况:
SHOW log_timezone; SHOW timezone;
第二步:修改配置文件
找到 PostgreSQL 的配置文件 postgresql.conf,通常位于数据目录下。用编辑器打开它:
vi /var/lib/pgsql/15/data/postgresql.conf
在文件中找到这两个参数,把它们修改成下面这样:
# 日志记录的时区,修改为中国时区 log_timezone = 'Asia/Shanghai' # 数据库内部存储和计算的时区,也建议修改为中国时区 timezone = 'Asia/Shanghai'
注意:如果行首有 # 号,一定要去掉,否则配置不会生效。
第三步:重启数据库服务
改完配置文件,需要重启 PostgreSQL 服务才能生效:
systemctl restart postgresql-15
第四步:验证修改结果
重启后,再次登录数据库,运行 SHOW log_timezone; 和 SHOW timezone;,确认值已经变成 Asia/Shanghai。这样,时区问题就彻底解决了。
