AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 308459
Accepted
Chris Halcrow
Chris Halcrow
Asked: 2022-03-09 19:45:54 +0800 CST2022-03-09 19:45:54 +0800 CST 2022-03-09 19:45:54 +0800 CST

为什么我会看到 PgAdmin 中显示的时区偏移量,以获取带有时区的时间戳

  • 772

我正在使用 PgAdmin 4 v6,对于一些数据类型为 的时间戳数据timestamp with time zone,我在 PgAdmin 中看到它是这样的:

2022-03-06 16:11:33+04

为什么+04正在显示?


我查看了以下 postgres 指南:

https://www.postgresql.org/docs/9.2/datatype-datetime.html#:~:text=PostgreSQL%20assumes%20your%20local%20time,being%20displayed%20to%20the%20client。

它声明如下:

所有可识别时区的日期和时间都以 UTC 格式在内部存储。在显示给客户端之前,它们会转换为 TimeZone 配置参数指定的区域中的本地时间。

此处的参考说明了有关 Postgres 中 TimeZone 配置的以下内容:

TimeZone (string)设置显示和解释时间戳的时区。内置默认值是 GMT,但通常在 postgresql.conf 中被覆盖;initdb 将在那里安装与其系统环境相对应的设置。

这表明以某种方式从数据库主机系统派生的时区被添加到 postgresql.conf 中。

我假设我在 PgAdmin 中看到偏移量的原因是 PgAdmin 正在显示存储值的转换版本,该版本基于存储在 postgresql.conf 中的数据库主机系统的时区信息。谁能确认这是否是 PgAdmin 在显示具有数据类型的数据时所做的事情timestamp with timezone?

postgresql timestamp
  • 1 1 个回答
  • 632 Views

1 个回答

  • Voted
  1. Best Answer
    Vérace
    2022-03-09T21:52:01+08:002022-03-09T21:52:01+08:00

    我在都柏林 - 目前在 UTC/GMT。

    我做了以下事情:

    CREATE TABLE t 
    (
      x TIMESTAMPTZ NOT NULL
    );
    

    然后

    INSERT INTO t VALUES (NOW());
    

    然后在 pgAdmin 中,我SELECT * FROM t和我看到的值是

    x
    timestamp with timezone
    2022-03-09 05:15:02.899933+00
    

    注意时区:2022-03-09 05:15:02.899933 +00- 因为我在 UTC/GMT。

    美好的。我检查了我的postgresql.conf,我有timezone = 'Europe/Dublin'。

    为了仔细检查,我查看了命令行:

    postgres=# SELECT * FROM pg_timezone_names WHERE name = current_setting('TIMEZONE');
         name      | abbrev | utc_offset | is_dst
    ---------------+--------+------------+--------
     Europe/Dublin | GMT    | 00:00:00   | t
    (1 row)
    

    所以,腰带和背带:

    postgres=# SELECT name, setting, unit, short_desc FROM pg_settings WHERE setting  LIKE '%ublin%';
       name   |    setting    | unit |                           short_desc
    ----------+---------------+------+-----------------------------------------------------------------
     TimeZone | Europe/Dublin |      | Sets the time zone for displaying and interpreting time stamps.
    (1 row)
    

    注意short_desc字段:

    Sets the time zone for displaying and interpreting time stamps.
    

    现在,我编辑我postgresql.conf的并将时区更改为America/Los_Angeles并重新启动我的服务器!

    现在,如果我这样做SELECT * FROM t;,它会给我:

    2022-03-08 21:15:02.899933-08
    

    比较一下2022-03-09 05:15:02.899933+00- 它们是相同的时间- 只是显示不同 -完全取决于我的postgresql.conf设置!

    大概这是为了让显示的时间对那些查看它们的人来说是有意义的。人们不会认为他们在半夜有约会。如果不习惯它们,可以很容易地跳过显示的日期时间/时间戳的时区部分。

    我可以想到一个例子,说明始终以 UTC/Zulu显示可能是个好主意,那就是在民用航空中,始终以 Zulu 给出所有时间(您会经常看到 YYYY-MM-DD HH: MM:SSZ写的)。

    回答:

    是的,它是决定时间显示给你的timezone设置!价值是不可变的!postgresql.confTIMESTAMPTZ

    你说:

    我假设我在 PgAdmin 中看到偏移量的原因是 PgAdmin 正在显示存储值的转换版本,该版本基于存储在 postgresql.conf 中的数据库主机系统的时区信息。谁能确认这是否是 PgAdmin 在显示具有时区数据类型时间戳的数据时所做的事情?

    当我在这台机器上安装 Windows 时,我选择了 PC 的时区,Dublin, Edinburgh, Lisbon, London当我安装 PostgreSQL 时,时区postgresql.conf设置为Europe/London- 我将其重置为Europe/Dublin. PostgreSQL 显然会根据您的系统设置做出它认为的最佳猜测。但是,正如您从上面看到的,很容易改变这一点。

    • 1

相关问题

  • 我可以在使用数据库后激活 PITR 吗?

  • 运行时间偏移延迟复制的最佳实践

  • 存储过程可以防止 SQL 注入吗?

  • PostgreSQL 中 UniProt 的生物序列

  • PostgreSQL 9.0 Replication 和 Slony-I 有什么区别?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve