PG SQL 10 设置默认时区为UTC

PG SQL 10 set default time zone to UTC

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

我试过 运行 宁这个,但它显示 0 更新行:

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

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

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

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

基于这个 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;

这有点冗长,但我现在先讲一下。

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

要转换数据,您可以这样进行:

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