• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    postgresql数据库 timescaledb 时序库 把大数据量表转换为超表的问题

    前言

    这几天工作的时候发现在 timescaledb 时序库 中有部分大数据量的表不是超表,估计是当时建库的时候没有改 影响插入,查询效率 ,因此需要改成超表
    因工作原因 部分内容做保密处理了

    一 创建新表

    首先因为在 timescaledb 时序库 中创建超表必须是要没有数据的表
    因此第一步是 创建一张跟原表一模一样的表(表名后面加个_cs) 你可以直接copy建表语句,也可以直接用工具复制表结构

    二 把新表改为超表

    把新建的表改为超表,7天一分区

    --我是7天一分区
    SELECT create_hypertable('表名_cs', 'alarm_time', chunk_time_interval => INTERVAL '7 day');
    -- 加个索引
    CREATE INDEX "表名_cs_create_time_idx" ON "hrmw"."表名_cs" USING btree (
     "create_time" "code"."列名" DESC NULLS FIRST
    );

    三 插入数据

    1.数据量不大的情况可以直接插入

    INSERT into 表名_cs SELECT * from 表名;

    2.如果数据量比较大 可以采取 一天一天 插入 或者一个月 或者几个月一起插入

    INSERT into 表名_cs SELECT * from 表名 where alarm_time >= '2020-9-1';
    INSERT into 表名_cs SELECT * from 表名 where alarm_time >= '2020-10-1' and alarm_time  '2020-11-1'  ;

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

    对于表数据量太大,一天一天的插入的话 可以运用储存过程(postgresql 数据库叫函数)

    下面是我写的函数。大家可以借鉴

    CREATE 
    	OR REPLACE PROCEDURE "hrmw"."sp_into_表名_pt" ( ) AS $BODY$ BEGIN
    	-- 一般按照表名来建函数
    	DECLARE --我声明的变量有点多 按实际的来
    		target_text TEXT;
    	sqltext TEXT;
    	sqltext1 TEXT;
    	sqltext2 TEXT;
    	rd record;
    	nloop INT;
    	isexist TEXT;
    	datestr TEXT;
    	begindate TEXT;
    	n INT;
    	BEGIN
    			--查询最早一天的时间
    			sqltext := 'select to_char(min(alarm_time),''yyyy-mm-dd'') datestr from tb_hrmw_moni_target';    
    		EXECUTE sqltext INTO begindate;
    		n := date_part( 'day', now( ) - begindate :: DATE );
    --enddate:=(to_char(now(),'yyyy-mm-dd'))::text;
    		FOR nloop IN 0..n
    		LOOP
    		datestr := ( begindate :: DATE + nloop ) :: TEXT;
    		sqltext2 := '
    		insert into 表名_cs 
    		select
    		列名1,
    		code,
    		列名2,
    		alarm_time,
    		列名3,
    		列名4
    		from 表名
    		where alarm_time >= ''' || datestr || ' 00:00:00''
    		and alarm_time = ''' || datestr || ' 23:59:59''
    		'; 
    		EXECUTE sqltext2;
    		COMMIT;
    		
    	END loop;
    RETURN;
    
    END;
    
    END $BODY$ LANGUAGE plpgsql

    四 查看效果

    模式 _timescaledb_internal下面的就是分区

    到此这篇关于postgresql数据库 timescaledb 时序库 把大数据量表转换为超表的文章就介绍到这了,更多相关postgresql数据库 timescaledb 时序库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • postgresql 数据库 与TimescaleDB 时序库 join 在一起
    • 浅析postgresql 数据库 TimescaleDB 修改分区时间范围
    上一篇:Postgresql 数据库权限功能的使用总结
    下一篇:详解PostgreSQL 实现定时任务的 4 种方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    postgresql数据库 timescaledb 时序库 把大数据量表转换为超表的问题 postgresql,数据库,timescaledb,