postgresql数据库时标数据库时间序列库中的大数据
  • 作者:admin
  • 发表时间:2021-04-24 07:53
  • 来源:未知

前言

这几天工作的时候发现时标db时间序列数据库中有些数据量大的表不是超级表。估计当时建数据库的时候插入和查询效率都没有受到影响,所以需要改成超级表

由于工作原因,部分内容被保密

1.创建新表格

首先,因为在timescaledb时间序列库中创建的超级表必须是没有数据的表

因此,第一步是创建一个与原始表完全相同的表(在表名后添加a _cs)。您可以直接复制表构建语句,也可以使用工具直接复制表结构

第二,将新表改为超级表

将新创建的表更改为超级表,并每7天对其进行一次分区

-我是7天组的

SELECT create _ hypertable(' table name _ cs ',' alarm _ time ',chunk _ time _ interval=interval ' 7 day ');

-添加索引

“CREATE INDEX”表名_ cs _ CREATE _ time _ idx“ON”hrmw。表名_cs' USING btree(

Create_time' 'code . '列名' DESC第一空'

);

3.插入数据

1.如果数据不大,可以直接插入

1从表名插入表名_ cs SELECT *;

2.如果数据量比较大,可以逐日插入,也可以一个月或者几个月一起插入

从表名插入表名_cs SELECT *其中alarm _ time=年9月1日';从表名插入表名_cs SELECT *其中alarm _ time=' 2020-10-1 '和alarm _ time ' 2020-11-1 ';

3.使用函数(存储过程)

对于大量的表数据,如果日复一日地插入,可以使用存储过程(postgresql数据库称为函数)

以下是我的唐山快照优化功能。你可以从中学习

创造

或替换程序' hrmw '。sp _ into _ table name _ pt '()$ AS $ BOdy $ BEgin

-一般根据表名来构建函数

声明——我声明的变量更现实一点

target _ text TEXT

sqltext TEXT

sqltext1 TEXT

sqltext2 TEXT

rd记录;

nloop INT

isexist TEXT

datestr TEXT

begindate TEXT

n INT

开始

-查询最早一天的时间

sqltext :='从tb_hrmw_moni_target选择to_char(min(alarm_time),' ' ' yyyy-mm-DD ' ')date str ';

将sqltext执行到开始日期;

n :=date_part('day ',now()-begin DATE : DATE);

- enddate:=(to_char(now(),' yyyy-mm-DD ')): text;

用于0中的nloop.n

DATE str :=(begin DATE : DATE nloop): TExT;

sqltext2 :='

插入表名_cs

选择

列名1,

代码,

列名2,

闹钟时间,

列名3,

列名4

从表名

其中alarm _ time=' ' ' | | datestr | | ' 00:00:00 ' '

和alarm _ time=' ' ' | | datestr | | ' 23:59:59 ' '