英俊的老海盗 2024-01-29 13:23 采纳率: 0%
浏览 17

timescaleDB关于超表时间分桶时区问题

1、问题:使用超表,时间间隔为1天,就会产生按照时间序列分子表跨8个时区现象,(首先确认的是时区没问题,select now();,和系统一致,show timezone,显示 'Asia/Shanghai'),现象是比如2024年1月15日的数据 '2024-01-15 01:00:00',会分配到1月14日数据子表,但是 '2024-01-15 09:00:00',就会分配到1月15日数据子表中,最后的结果是 time_bucket()函数结果不对
操作步骤

-- 建表语句
create table test(
  time timestamptz not null,
 type int4 not null,
price float8 not null
);
-- 建立超表
select create_hypertable('test', 'time', chunk_time_interval => interval '1 day');

-- 插入数据
insert into test values('2024-01-25 00:03:28',1,1);
insert into test values('2024-01-25 10:03:28',1,1);
insert into test values('2024-01-26 00:03:28',1,1);
insert into test values('2024-01-26 06:01:28',1,1);
insert into test values('2024-01-26 10:01:28',1,1);
insert into test values('2024-01-27 00:03:28',1,1);
insert into test values('2024-01-28 00:03:28',1,1);
insert into test values('2024-01-29 00:03:28',1,1);

select * from test 的结果为:

img

select show_chunks('test') 为:

img

查找子表 select * from _timescaledb_internal._hyper_9_82_chunk

img

按道理来讲,不同日期应该在不同分区,但是结果却是往前搓了8个小时,当然执行 time_bucket() 函数也是错的,有谁能帮个忙解决下吗?

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-01-29 13:27
    关注

    引自免费微信小程序:皆我百晓生

    根据您提供的信息,您在使用TimescaleDB的超表功能时遇到了时间分桶跨时区的问题。经过分析,可能是时区配置不正确导致的。以下是我为您提供的解决方案:

    1. 确认时区设置:通过执行SHOW timezone;命令来确认时区设置,确保显示的时区与您所在的时区(Asia/Shanghai)一致。如果有不同,请使用SET timezone='Asia/Shanghai';命令进行设置。

    2. 更新chunk表的时区:在TimescaleDB中,每个分区(chunk)都有自己的时区设置。您可以通过以下SQL语句更新chunk表的时区设置,确保与系统的时区一致:

      UPDATE _timescaledb_internal.chunk_time_interval SET timezone = 'Asia/Shanghai';
      

      请注意,这个更新操作只需要执行一次即可。

    3. 重启数据库服务:更新chunk表的时区设置后,为了使更改生效,您需要重新启动数据库服务。

      sudo service postgresql restart
      

    重新执行您的查询语句,现在应该能正确地根据时间进行分桶,并得到正确的查询结果。

    如果您还有其他问题,请随时提问。

    评论

报告相同问题?

问题事件

  • 创建了问题 1月29日

悬赏问题

  • ¥15 winFrom界面无法打开
  • ¥15 crossover21 ARM64版本安装软件问题
  • ¥15 mymetaobjecthandler没有进入
  • ¥15 mmo能不能做客户端怪物
  • ¥15 osm下载到arcgis出错
  • ¥15 Dell g15 每次打开eiq portal后3分钟内自动退出
  • ¥200 使用python编写程序,采用socket方式获取网页实时刷新的数据,能定时print()出来就行。
  • ¥15 matlab如何根据图片中的公式绘制e和v的曲线图
  • ¥15 我想用Python(Django)+Vue搭建一个用户登录界面,但是在运行npm run serve时报错了如何解决?
  • ¥15 QQ邮箱过期怎么恢复?