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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PG SQL 10将默认时区设置为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'。

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

答案

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

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

SET timezone = 'UTC';
ALTER TABLE mytable ALTER timestampcol TYPE timestamp without time zone;
另一答案

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

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

以上是关于PG SQL 10将默认时区设置为UTC的主要内容,如果未能解决你的问题,请参考以下文章

将 UTC 中的 SQL Server 日期时间转换为特定时区

Postgres UTC时区vs当地时区

将celery定时任务设置为根据本地时区触发

调整 RDS 上的默认时区设置

linux下的硬件时钟存储的时间是UTC时间还是用户设定的时区时间(比如说北京时间)?

TSQL:如何将本地时间转换为 UTC? (SQL Server 2008)