PG SQL 10将默认时区设置为UTC

问题描述 投票:0回答:2

我需要更改数据库配置以使用UTC作为AWS RDS上托管的PostgreSQL10实例的默认值。我希望它在数据库级别永久更改,并且永远不会恢复到任何其他时区,无论如何。

我试过运行它,但它显示0更新的行:

ALTER DATABASE <my-db> SET timezone='UTC'; 

我已经尝试将自定义参数组附加到RDS中的数据库并修改这样的条目(也在之后重新启动):

无论我做什么,当我运行select * from pg_settings where name = 'TimeZone';SHOW timezone时,它显示'America / Chicago'。

看起来这应该很容易,但事实证明这是一个挑战。

postgresql timezone postgresql-10
2个回答
2
投票

如果您希望以UTC格式存储时间戳并且始终希望数据库也以UTC格式将数据发送到客户端,则应使用数据类型timestamp without time zone,它不会为您执行任何时区处理。那将是最简单的解决方案。

要转换数据,您可以这样继续:

SET timezone = 'UTC';
ALTER TABLE mytable ALTER timestampcol TYPE timestamp without time zone;

0
投票

基于这个dba.stackexchange.com问题。显然,PG以UTC时间存储时间戳,但随后将其转换为会话时区。从我收集的内容来看,由于我的时间戳不包含时区信息,我需要告诉PG,存储的时区是UTC,然后将其转换为需要的本地时间,如下所示:

SELECT my_timestamp_in_utc AT TIME ZONE 'UTC' AT TIME ZONE 'America/Denver' as my_local_time FROM my_table;

这有点冗长,但我现在还会用它。

© www.soinside.com 2019 - 2024. All rights reserved.