返回 导航

其他

hangge.com

PostgreSQL - 使用generate_series函数生成大量测试数据(附样例)

作者:hangge | 2021-03-31 08:14
    有时我们需要在数据库中构建大量的基础数据(比如千万级别数据)进行查询操作的性能测试或者 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 万条随机测试数据:
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)查看数据库,可以发现测试数据已经创建成功:
评论

全部评论(0)

回到顶部