使用postgresql 模拟批量数据插入的案例
程序员文章站
2022-03-13 21:22:25
创建表:create table t_test( id int primary key not null, name text not null, age int...
创建表:
create table t_test( id int primary key not null, name text not null, age int not null, address char(50), salary real );
模拟批量插入:
insert into t_test select generate_series(1,5000000) as key,repeat( chr(int4(random()*26)+65),4), (random()*(6^2))::integer,null,(random()*(10^4))::integer;
解释:
其中:
1、generate_series(1,5000000),表示生成一个数值序列,从1到5000000,步进为一。
generate_series作用可见下表:
2、repeat: 重复生成字符串的函数
repeat(s,n)返回一个由重复的字符串s组成的字符串,n表示重复生成的次数。若n<=0,则返回一个空字符串;若s或n为null,则返回null。
3、
select (random()*(6^2))::integer :随机数字 十位不超过6的两位数
select (random()*(10^4))::integer; 四位数
结果:
补充:postgresql 生成测试数据
此处,我简单的写一个例子,供参考(在postgresql9.1下面做的):
(1)准备知识
针对 postgres生成数据方法
生成序列
select * from generate_series(1,5);
生成date
select date(generate_series(now(), now() + '1 week', '1 day'));
生成integer 随机数
select (random()*(2*10^9))::integer;
生成numeric 随机数
select (random()*100.)::numeric(4,2);
生成字符串
select substr('abcdefghijklmnopqrstuvwxyz',1,(random()*26)::integer);
生成重复串
select repeat('1',(random()*40)::integer);
举例:
select generate_series(1,10) as key,(random()*100.)::numeric(4,2),repeat('1',(random()*25)::integer) order by random();
结果:
-- 生成随机汉字符串 create or replace function gen_hanzi(int) returns text as $$ declare res text; begin if $1 >=1 then select string_agg(chr(19968+(random()*20901)::int), '') into res from generate_series(1,$1); return res; end if; return null; end; $$ language plpgsql strict;
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。
推荐阅读
-
oracle使用一条语句批量插入多条数据的方法
-
postgres 使用存储过程批量插入数据的操作
-
使用postgresql 模拟批量数据插入的案例
-
jdbc使用PreparedStatement批量插入数据的方法
-
postgresql数据库使用——数据库不重复插入表的几种操作
-
高级oracle和mysql高低效率批量插入的区别 - 数据库经典案例(中级篇)
-
oracle使用一条语句批量插入多条数据的方法
-
ThinkPHP3.2框架使用addAll()批量插入数据的方法分享
-
ThinkPHP3.2框架使用addAll()批量插入数据的方法分享
-
jdbc使用PreparedStatement批量插入数据的方法