百万级数据生成
test=# create table t001(id int,name varchar(10),tt date);CREATE TABLEtest=#test=# create table t002(id int);错误: 关系 "t002" 已经存在test=#test=# create table t002(id int);CREATE TABLEtest=#test=# insert into t001 select generate_series(1,300000000)+300000000,'abc'||'-pgsql',now();INSERT 0 30000000test=# insert into t002 select id from t001 where rownum<=10;INSERT 0 10test=#
使用generate_series函数生成大量数据
1,准备工作
首先我们创建一张 people 表用于插入测试数据,具体如下:
create table people(id integer,name varchar(32),age integer,grade numeric(4, 2),birthday date,logintime timestamp);
2,插入数据
(1)我们执行如下命令插入 1 万条随机测试数据:
insert into peopleselect generate_series(1,10000) as id,md5(random()::text) as name,(random()*100)::integer as age,(random()*99)::numeric(4,2) as grade,now() - ((random()*1000)::integer||' day')::interval as birthday,clock_timestamp() as logintime;
Postgresql生成大量数据
顺序数
生成一批顺序值
test=# select id from generate_series(1,10) t(id);id----12345678910(10 行记录)test=#
随机数
生成一批随机数和一批随机整型
test=# select random() from generate_series(1,10);random---------------------0.073174353594353650.070210807053026510.77708946985247710.242677385393481160.52540668202777850.68020599267928720.175831225785692880.79457879052732850.6326577251327450.5699608870422672(10 行记录)test=# select (random()*10)::int from generate_series(1,10);int4------2057819699(10 行记录)test=#
随机字符串——md5(random()::text)
生成一批随机字符串
test=# select md5(random()::text) from generate_series(1,10);md5----------------------------------26f060e79777502c5941411ac8e1dafa1db41aa4624660a57dcc8077e2f7776f2c8991249f1e42dedfae0645781bfdc6a7e51f904fb34b2e2230a980d116413939a6e0b8ba75b51cee4fd21b8ae1dd66bfe0882619786790d1cc85efdd1f96ef951b740fe2441666f2786d1ef5db16812e0f845c449813379c57eb6646a9e25c2885a2e998a7ad5ff15db0414c9346cc9e43245ea2f959c8c6ab3a75c489be96(10 行记录)test=#
重复字符串 repeat(‘abc’,10)
生成重复两次的随机字符串
test=# select repeat(md5(random()::text),2) from generate_series(1,10);repeat------------------------------------------------------------------336171d91cdc4de6157c1ac50611fb0e336171d91cdc4de6157c1ac50611fb0ecb19868acef2561cc3a4a1562934ea48cb19868acef2561cc3a4a1562934ea48dd9f43b9fc1d7fba3447c3652d1ea9a1dd9f43b9fc1d7fba3447c3652d1ea9a1b6e79961dd8f61ee3c43904c5787508cb6e79961dd8f61ee3c43904c5787508c9f739ebff857597bca54c97a6b442b329f739ebff857597bca54c97a6b442b327d28c03b80de5c5314a9f563896bc3837d28c03b80de5c5314a9f563896bc383d7fd4834da564f93ca97b413d7a51100d7fd4834da564f93ca97b413d7a511007027c2fa3ad75625a5659f945bf007817027c2fa3ad75625a5659f945bf0078188d2b5c470c22ee960c80a2b8dd1816288d2b5c470c22ee960c80a2b8dd18162568a6b2a571404c0488d58414d496da0568a6b2a571404c0488d58414d496da0(10 行记录)test=#
随机中文
create or replace function gen_hanzi(int) returns text as $$declareres text;beginif $1 >=1 thenselect string_agg(chr(19968+(random()*20901)::int), '') into res from generate_series(1,$1);return res;end if;return null;end;$$ language plpgsql strict;test=# select gen_hanzi(10) from generate_series(1,10);gen_hanzi----------------------哗籜澉蒆貼禝躠齜偟湾頶赏飣覤娩庴魨陁嚛薶屾懴承蓁慖愉跐欘玈獑泱叽桗夠抛枧荠诐氍熐于矔骭鉗紁黖占僔淥軙纸劅隦櫌漅灁燐椾卛獝鎭碿碌庡淚圎焕釯媯濻捐鉗寘詰盛砹鄕崆醎乵萺蟇聻嚬娣仼曣草憏陗铋烮隨蹳撒镅姴臙馼蟉(10 行记录)test=#
自定义函数
随机身份证号
create or replace function gen_id(a date,b date)returns text as $$select lpad((random()*99)::int::text, 2, '0') ||lpad((random()*99)::int::text, 2, '0') ||lpad((random()*99)::int::text, 2, '0') ||to_char(a + (random()*(b-a))::int, 'yyyymmdd') ||lpad((random()*99)::int::text, 2, '0') ||random()::int ||(case when random()*10 >9 then 'X' else (random()*9)::int::text end ) ;$$ language sql strict;test=# select gen_id('1900-01-01','2022-01-01') from generate_series(1,10);gen_id--------------------47967719110128530X30838119471012001132636919430918720565864119270826520681751619821123160892575320070709730081397520080818460205255119520106170X432005202007165514571443199003016713(10 行记录)test=#
