数据仓库服务 GAUSSDB(DWS)-数据库时间与系统时间不一致,如何更改数据库默认时区:处理方法

时间:2024-05-07 20:29:47

处理方法

方法一:更改某个GaussDB(DWS) 集群的数据库默认时区

  1. 登录GaussDB(DWS) 管理控制台。
  2. 在左侧导航栏中,单击“集群管理”
  3. 在集群列表中找到所需要的集群,单击集群名称,进入集群“基本信息”页面。
  4. 单击“参数修改”页签,修改参数“timezone”,修改为您所在的时区,然后单击“保存”
  5. “修改预览”窗口,确认修改无误后,单击“保存”
  6. 用户可根据界面中参数“timezone”所在行的“是否重启”列,判断修改参数后无需进行重启操作。

    修改“timezone”参数后无需重启集群操作 ,则修改后立即生效。

方法二:通过后台命令查询和更改数据库时区。

  1. 查询客户端时区和当前时间。其中客户端时区为UTC时区,now()函数返回当前时间。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    show time zone;
     TimeZone
    ----------
     UTC
    (1 row)
     
    select now();
                  now
    -------------------------------
     2022-05-16 06:05:58.711454+00
    (1 row)
    

  2. 创建数据表,其中timestamp,timestamptz是常用的时间类型。timestamp不保存时区,timestamptz保存时区。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE timezone_test (id int, t1 timestamp, t2 timestamptz) DISTRIBUTE BY HASH (id);
    
    \d timezone_test
               Table "public.timezone_test"
     Column |            Type             | Modifiers
    --------+-----------------------------+-----------
     id     | integer                     |
     t1     | timestamp without time zone |
     t2     | timestamp with time zone    |
    

  3. 向timezone_test表插入当前时间并查询当前表。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    insert into timezone_test values (1, now(), now() );
    show time zone;
     TimeZone
    ----------
     UTC
    (1 row)
    select * from timezone_test;
     id |             t1             |              t2
    ----+----------------------------+-------------------------------
      1 | 2022-05-16 06:10:04.564599 | 2022-05-16 06:10:04.564599+00
    (1 row)
    

    t1(timestamp类型)在保存数据时丢弃了时区信息,t2(timestamptz类型)保存了时区信息。

  4. 把客户端时区设置为东8区(UTC-8),再次查询timezone_test表。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    set time zone 'UTC-8';
    show time zone;
     TimeZone
    ----------
     UTC-8
    (1 row)
    select now();
                  now
    -------------------------------
     2022-05-16 14:13:43.175416+08
    (1 row)
    

  5. 继续插入当前时间到timezone_test表,并查询。此时t1新插入的值是用的东8区时间,t2根据客户端时区对查询结果进行转换。

    1
    2
    3
    4
    5
    6
    7
    insert into timezone_test values (2, now(), now() );
    select * from timezone_test;
     id |             t1             |              t2
    ----+----------------------------+-------------------------------
      1 | 2022-05-16 06:10:04.564599 | 2022-05-16 14:10:04.564599+08
      2 | 2022-05-16 14:15:03.715265 | 2022-05-16 14:15:03.715265+08
    (2 rows)
    
    • timestamp类型只受数据在插入时的时区影响,查询结果不受客户端时区影响。
    • timestamptz类型在数据插入时记录了时区信息,查询时会根据客户端时区做转换,以客户端时区显示数据。

support.huaweicloud.com/trouble-dws/dws_09_0029.html