如果RDS PostgreSQL实例的时区设置与业务逻辑需要的时区不一致,或者应用程序需要处理多个时区的数据,则需要修改数据库实例的时区配置,以确保数据在不同时区之间的转换和展示正确无误。
前提条件
RDS PostgreSQL云盘版实例。
注意事项
SET timezone
语句仅当前会话生效,无法持久化,建议通过设置实例参数功能进行修改。如果您需要为某个数据库单独设置时区,请使用
ALTER DATABASE <数据库名称> SET timezone TO '<时区名>';
语句进行修改。说明如果需要恢复某个数据库至系统默认时区,请使用
ALTER DATABASE <数据库名称> SET timezone TO DEFAULT;
语句恢复默认。PostgreSQL支持TIMESTAMP和TIMESTAMPTZ两种存储时间戳的数据类型,请您根据实际业务需求,选择不同数据类型:
TIMESTAMP:该数据类型会以UTC时间存储日期和时间,不会存储时区信息。如果您参考本文档修改时区后,该类型的查询结果不会变化。
TIMESTAMPTZ:该数据类型会存储日期、时间以及时区信息。当存储时间数据时,会将时间转换为UTC时间存储到表中,当查询时间数据时,会将UTC时间转换为当前实例或数据库所设置的时区对应的时间。如果您参考本文档修改时区后,该类型的查询结果会根据时区变化而自动变化。
修改时区
RDS PostgreSQL云盘版实例支持修改配置文件中的时区设置,您可以在控制台的参数设置页面修改参数timezone。操作详情请参见设置实例参数。
RDS PostgreSQL本地盘实例暂不支持timezone参数。
查看支持的时区
您可以使用如下命令查看支持的时区:
SELECT name,utc_offset FROM pg_timezone_names;
关于pg_timezone_names表的更多信息,请参见pg_timezone_names。
相关文档
如果购买实例时,如果不配置时区参数,系统将根据您购买实例的地域,选择默认时区。地域与默认命名时区的对应关系,请参见RDS PostgreSQL实例地域与默认命名时区对应关系。
RDS PostgreSQL只支持命名时区,不支持UTC时区。命名时区的详细信息,请参见RDS PostgreSQL实例的常用命名时区清单。
您还可以通过API修改参数timezone。
API
描述
修改实例参数