这篇文章主要介绍了数据库使用存储过程批量插入数据的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
参考官方文档
创造或取代函数creatData2()返回
布尔如同
$BODY$
声明二整数;
开始
II:=1;
用于二进制一.10000000 LOOP
插入IPM _ model _ history _ data(RES _ model,res_id)值(116,ii);
结束循环;
返回真正的
结束;
$BODY$
语言plpgsql
从creatData2()中选择*作为选项卡;
插入一千万条数据耗时610s,当然字段不多的情况下。
补充:Postgresql存储过程-更新或者插入数据
要记录某一时段机器中央处理器、内存、硬盘的信息,展示的时间粒度为分钟,但是为了精确,输入数据源的时间粒度为6s。这个统计过程可以在应用层做好,每分钟插入一次,也可以在数据库层写个存储过程来完成,根据传入数据的时间来判断是更新数据库旧数据还是插入新数据。
同时,这些数据只需要保留一周,更老的数据需要被删除。删除动作可以每天定时执行一次,也可以写在存储过程中每次检查一下。
考虑到性能在此时没什么太大约束,而后面存储过程的接口方式更漂亮些,不用应用层去关心数据到底组织成什么样,因此实现了一个如下:
Postgresql V8.3
创建或替换函数插入_主机_状态(_日志_日期时间戳不带时区,_主机inet,_cpu整数,_mem整数,_磁盘整数)
返回无效的如同
$BODY$
宣布
不带时区的新开始(_ s)时间戳;
不带时区的当前开始时间时间戳;
c_id整数;
不带时区的c_log_date时间戳;
c_cpu整数;
c_mem整数;
c _ disk整数
铜锡锌合金板(导航板的缩写)唐山百度优化;c_count整数;
日期(_span)间隔;
开始
-插入或更新
选择id,log_date,cpu,mem,disk,count INTO c_id,c_log_date,c_cpu,c_mem,c_disk,c _ count FROM host _ status _ BY minute WHERE host=_ host ORder BY id desc限制1;
SELECT timestamp_mi(_log_date,c _ log _ date)INTO date _ span;
如果日期='00:00:60 '或c_id为空,则
插入主机状态分钟(log_date,主机,cpu,mem,磁盘,计数)值(_log_date,_host,_cpu,_mem,_disk,1);
表达式日期_span='-00:00:60 '然后
c _ mem :=((c _ mem * c _ count)_ mem)/(c _ count 1);
c _ CPU :=((c _ CPU * c _ count)_ CPU)/(c _ count 1);
c _ disk :=((c _ disk * c _ count)_ disk)/(c _ count 1);