【问题标题】:Postgresql SELECT CURRENT_TIMESTAMP does not show timezonePostgresql SELECT CURRENT_TIMESTAMP 不显示时区
【发布时间】:2020-09-22 11:31:54
【问题描述】:

最初我有一个名为“created_at”的时间戳列,设置如下:

  • 类型:带时区的时间戳
  • 默认值:transaction_timestamp()

但是,我注意到插入新记录时“created_at”的值不包括尾随时区。

然后我尝试运行

SELECT CURRENT_TIMESTAMP;

奇怪的是,它只返回(我复制粘贴下面的值)

2020-06-03 16:55:36.637892

在此处阅读本手册:

https://www.postgresql.org/docs/8.2/functions-datetime.html#FUNCTIONS-DATETIME-CURRENT

我希望在运行上述语句时也能获得时区信息。

我使用 Datagrip 作为我的 IDE 来执行上述操作。

有人知道为什么吗?

【问题讨论】:

    标签: postgresql timestamp timezone datagrip timestamp-with-timezone


    【解决方案1】:

    连接时间戳和时区的 current_setting 为您提供预期值,您可以使用以下任何语法

    SELECT CURRENT_TIMESTAMP|| ' ' ||current_setting('TIMEZONE');
    
    SELECT now()|| ' ' ||current_setting('TIMEZONE');
    

    您将使用 select current_setting('TIMEZONE'); 获取当前时区设置

    这将为您提供所有时区,供您参考SELECT * FROM pg_timezone_names;

    【讨论】:

      【解决方案2】:
      1. 检查您是否设置了时区

      SHOW TIMEZONE;

      1. 如果不设置时区

      SET TIMEZONE='YOUR_TIMEZONE';

      如果您设置了时区,则将其添加到 IDEA 的 VM 选项中:

      -Duser.timezone=YOUR_TIMEZONE

      【讨论】:

        【解决方案3】:

        这是一个演示问题,而不是一个真正的问题。 transaction_timestamp() 和 CURRENT_TIMESTAMP 都有时区。要正确显示,试试这个:

        select to_char(CURRENT_TIMESTAMP, 'YYYY-MM-DD"T"HH24:MI:SSOF');
        2020-06-03T21:54:08+03
        select to_char(transaction_timestamp(), 'YYYY-MM-DD"T"HH24:MI:SSOF');
        2020-06-03T22:00:36+03
        

        它以 ISO8601 格式显示当前时间戳,并带有正确的时区偏移。
        如果您需要毫秒,请使用以下格式模式:(or see the documentation)

        'YYYY-MM-DD"T"HH24:MI:SS.MSOF'
        

        【讨论】:

          猜你喜欢
          • 2013-01-22
          • 1970-01-01
          • 2019-07-14
          • 2011-02-28
          • 1970-01-01
          • 2014-12-17
          • 2013-04-25
          • 1970-01-01
          相关资源
          最近更新 更多