news 2026/4/17 17:40:15

HGDB数据库时区修改

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HGDB数据库时区修改

文章目录

  • 环境
  • 文档用途
  • 详细信息

环境

系统平台:N/A
版本:4.1.1,4.3.2

文档用途

用于指导HGDB修改时区的操作

详细信息

1、查看系统时间与时区

–linux系统

[root@localhost ~]# date -R

Fri, 27 Jul 2018 14:37:48 +0800

–Windows系统

控制面板–>日期和时间–>时区,可以看到当前时区

2、查看HGDB数据库的时区与时间

highgo=# select now();now-------------------------------2018-07-2714:48:35.576102+08(1行记录)highgo=# show time zone;TimeZone----------------Asia/Hong_Kong(1行记录)

3、查看HGDB数据库所有可供选择的时区

highgo=# select * from pg_timezone_names;name|abbrev|utc_offset|is_dst----------------------------------+--------+------------+--------Africa/Abidjan|GMT|00:00:00|f Africa/Accra|GMT|00:00:00|f Africa/Addis_Ababa|EAT|03:00:00|f Africa/Algiers|CET|01:00:00|f Africa/Asmara|EAT|03:00:00|f Africa/Asmera|EAT|03:00:00|f Africa/Bamako|GMT|00:00:00|f Africa/Bangui|WAT|01:00:00|f Africa/Banjul|GMT|00:00:00|f Africa/Bissau|GMT|00:00:00|f Africa/Blantyre|CAT|02:00:00|f Africa/Brazzaville|WAT|01:00:00|f Africa/Bujumbura|CAT|02:00:00|f Africa/Cairo|EET|02:00:00|f Africa/Casablanca|WEST|01:00:00|t Africa/Ceuta|CEST|02:00:00|t Africa/Conakry|GMT|00:00:00|f......UCT|UCT|00:00:00|f Universal|UTC|00:00:00|f US/Alaska|AKDT|-08:00:00|t US/Aleutian|HDT|-09:00:00|t US/Arizona|MST|-07:00:00|f US/Central|CDT|-05:00:00|t US/East-Indiana|EDT|-04:00:00|t US/Eastern|EDT|-04:00:00|t US/Hawaii|HST|-10:00:00|f US/Indiana-Starke|CDT|-05:00:00|t US/Michigan|EDT|-04:00:00|t US/Mountain|MDT|-06:00:00|t US/Pacific|PDT|-07:00:00|t US/Pacific-New|PDT|-07:00:00|t US/Samoa|SST|-11:00:00|f UTC|UTC|00:00:00|f W-SU|MSK|03:00:00|f WET|WEST|01:00:00|t Zulu|UTC|00:00:00|f(593行记录)

4、数据库全局时区的修改

确定当前要修改为哪个时区,在上面结果中找到对应的时区名称,修改配置文件$PG_DATA/postgresql.conf中的参数timezone和log_timezone的值,然后重新加载配置文件即可。

5、修改数据库和用户级别的时区

--查看当前数据库全局时区highgo=# show time zone;TimeZone-----------US/Alaska(1行记录)--修改当前名为highgo的数据库时区highgo=# alter database highgo set timezone='Asia/Hong_Kong';ALTERDATABASE--查询修改结果highgo=# select * from pg_db_role_setting;setdatabase|setrole|setconfig-------------+---------+---------------------------12428|0|{TimeZone=Asia/Hong_Kong}(1行记录)--修改角色highgo的时区highgo=# alter role highgo set timezone='US/Aleutian';ALTERROLE--查看修改后的效果highgo=# select * from pg_db_role_setting;setdatabase|setrole|setconfig-------------+---------+---------------------------12428|0|{TimeZone=Asia/Hong_Kong}0|10|{TimeZone=US/Aleutian}(2行记录)--查看全局时区highgo=# show time zone;TimeZone-----------US/Alaska(1行记录)

HGDB可以设置数据库、角色、会话级别的时区,会话级别的仅对当前会话起作用,同理角色及数据库级别的仅对设置的角色及数据库起作用,但不会影响设置时连接的会话,需要重新连接角色或数据库后才会生效。

6、时区修改后,表中已有的数据,只有TIMESTAMP WITH time zone类型会随时区的变化而改变,如果是time WITH time zone类型,可以在查询时直接转换为当前使用的时区,例如:

highgo=# SELECT '2018-08-01 14:00:00+08' at time zone 'US/Alaska';timezone---------------------2018-07-3122:00:00(1行记录)

如需将其他的时间类型修正到修改后的时区,可参考如下步骤:

(1)计算两个时区间的时间差

两时区间的时间差=(当前时区-目标时区)

目标时区的时间=当前时区的时间-(当前时区-目标时区),(注:东时区为正,西时区为负)

例:当前时区为Asia/Hong_Kong,即东8区(UTC/GMT+08:00),目标时区为US/Alaska,即西8区(UTC/GMT-08:00)

两时区间的时间差=(+8)-(-8)=16

已知东八区当前时间为2018-08-01 12:00,计算西八区的时间,

西八区时间=2018-08-01 12:00-((+8)-(-8))=2018-07-31 20:00:00-08

(2)根据上面的公式计算出时间差,编写update语句,批量更新数据即可。

7、修改时区对数据的影响

修改时区后,数据类型“TIMESTAMP WITH time zone”会随时区发生变化,其余时间类型不会跟随时区改变。

以下实验说明了这种影响

--查看当前时区(东八区)highgo=# show time zone;TimeZone----------------Asia/Hong_Kong(1行记录)--创建测试表highgo=# CREATE TABLE test_zone ( id NUMERIC, tpz TIMESTAMP WITH time zone, tpoutz TIMESTAMP, twz time WITH time zone, twoz time without time zone );CREATETABLE--插入测试数据highgo=# INSERT into test_zone VALUES(1,'2018-08-1 12:00:00','2018-08-1 12:00:00','2018-08-1 12:00:00','2018-08-1 12:00:00');INSERT01highgo=# INSERT into test_zone VALUES(2,'2018-08-1 13:00:00','2018-08-1 13:00:00','2018-08-1 13:00:00','2018-08-1 13:00:00');INSERT01highgo=# INSERT into test_zone VALUES(3,'2018-08-1 14:00:00','2018-08-1 14:00:00','2018-08-1 14:00:00','2018-08-1 14:00:00');INSERT01highgo=#highgo=# SELECT * from test_zone;id|tpz|tpoutz|twz|twoz----+------------------------+---------------------+-------------+----------1|2018-08-0112:00:00+08|2018-08-0112:00:00|12:00:00+08|12:00:002|2018-08-0113:00:00+08|2018-08-0113:00:00|13:00:00+08|13:00:003|2018-08-0114:00:00+08|2018-08-0114:00:00|14:00:00+08|14:00:00(3行记录)--修改当前时区(改为西八区)log_timezone='US/Alaska'timezone='US/Alaska'pg_ctl reload-D D:\highgo\database\4.3.2\data--再次查询结果highgo=# show time zone;TimeZone-----------US/Alaska(1行记录)highgo=# SELECT * from test_zone;id|tpz|tpoutz|twz|twoz----+------------------------+---------------------+-------------+----------1|2018-07-3120:00:00-08|2018-08-0112:00:00|12:00:00+08|12:00:002|2018-07-3121:00:00-08|2018-08-0113:00:00|13:00:00+08|13:00:003|2018-07-3122:00:00-08|2018-08-0114:00:00|14:00:00+08|14:00:00(3行记录)--由以上结果可知,仅有tpz列(数据类型为TIMESTAMP WITH time zone)跟随时区发生了改变,其余列(数据类型分别为:TIMESTAMP、time WITH time zone、time without time zone)未根据时区发生改变。--根据当前的时区修正数据,两个时区间相差16小时,需要更新的字段为tpoutz、twz、twoz,语句如下UPDATEtest_zonesettpoutz=tpoutz-INTERVAL'16 hours',twz=twz attimezone'US/Alaska',twoz=twoz-INTERVAL'16 hours'--数据更新之后,查询结果如下highgo=# SELECT * from test_zone;id|tpz|tpoutz|twz|twoz----+------------------------+---------------------+-------------+----------1|2018-07-3120:00:00-08|2018-07-3120:00:00|20:00:00-08|20:00:002|2018-07-3121:00:00-08|2018-07-3121:00:00|21:00:00-08|21:00:003|2018-07-3122:00:00-08|2018-07-3122:00:00|22:00:00-08|22:00:00(3行记录)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 5:51:10

全网首发!万字硬核解析:如何用向量引擎API构建企业级GPT-5.2与Sora2双模态中台(附完整源码+架构图)

摘要本文不仅仅是一篇教程。 更是一次对当下AI开发模式的深度反思与重构。 随着GPT-5.2、Sora2、Veo3等核弹级模型的相继发布。 传统的“单点直连”开发模式已经彻底崩塌。 面对高昂的维护成本、复杂的网络环境以及碎片化的接口标准。 我们迫切需要一种新的架构思想。 本文将通…

作者头像 李华
网站建设 2026/4/15 11:44:37

冥想第一千七百七十七天(1777)

1.周三,今天还是特别忙,中午忙工作休息的时间特别短。天气比前两天好多了。 2.感谢父母,感谢朋友,感谢家人,感谢不断进步的自己。

作者头像 李华
网站建设 2026/4/11 9:02:04

状态观测器深入浅出:从“为何需要”到“如何设计”

今天补充一下观测器的理论知识。 引言:我们为何需要“猜测”系统内部? 在理想的控制系统设计中,我们通常假设所有需要的状态变量(比如位置、速度、温度、化学浓度等)都可以通过传感器直接、精确地测量。然而,现实很骨感,很多时候我们无法直接获取这些关键状态: 物理限…

作者头像 李华
网站建设 2026/4/10 17:11:14

Flutter 三端应用实战:OpenHarmony 简易文本首尾字符对比器开发指南

一、为什么需要“简易文本首尾字符对比器”? 在 OpenHarmony 的文本校验、格式验证与结构分析场景中,同时观察首尾字符能提供独特的上下文洞察: 程序员:检查字符串是否被正确包裹(如 "..."、...、[...]、{..…

作者头像 李华
网站建设 2026/4/16 22:06:57

CMake工程指南(一):基础概念与核心优势

引言 在现代C/C开发中,构建系统是项目管理的核心。传统的构建方式往往面临跨平台兼容性差、配置复杂等问题。本教程将带你深入了解CMake——这个C/C开发的事实标准构建工具。 什么是构建系统? 构建(Build) 编译(Compil…

作者头像 李华
网站建设 2026/4/16 14:58:36

【算法分享】R树索引

在车联网、POI 分析、地理围栏、行政区划判断等业务中,我们经常会遇到一个非常基础、但极其高频的问题: 👉 给定一个经纬度点,它属于哪个(或哪些)多边形? 比如: 一个 GPS 点属于哪个…

作者头像 李华