PostgreSQL - 使用generate_series函数生成大量测试数据(附样例)
有时我们需要在数据库中构建大量的基础数据(比如千万级别数据)进行查询操作的性能测试或者 sql 优化。如果我们使用的是 PostgreSQL 数据库,可以通过其内置 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 万条随机测试数据:
(2)查看数据库,可以发现测试数据已经创建成功:
insert into people select 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;
(2)查看数据库,可以发现测试数据已经创建成功:
附:生成随机中文
(1)如果我们想要插入随机的中文数据,首先创建一个如下自定义函数 hanzi:
create or replace function 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;
(2)接着使用该函数来创建数据:
insert into hangge(note) select hanzi(10) from generate_series(1,10);
(3)查看数据库,可以发现测试数据已经创建成功: