如何使用Postgresql 造数据?

544 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第10天,点击查看活动详情

大家好,我是阿萨。 最近有使用数据库造数据的经历。 为了避免自己忘记,所以特意记录下如何用Postgres去造随机数据。

 一  造顺序值

select id from generate_series(1,10) t(id);

(1,10) 这里说是输入的参数,第一个值是最小值,第二个值是最大值。

1—10,代表最大值和最小值。按照自己需要去修改。

id 表示 自己生成数据的顺序,因为是按照1,2,3,4,5,6,7,8,9,10 的顺序生成的,所以结果就是受损徐值。

generate_series 参数可以设置数据类型有 bigint,integer,numeric和timestamp。带时区和不带时区的都可以输入。

二  造随机数

select random() from generate_series(1,10);

这个意思是生成10个随机小数,如果自己想要对的值是比较大的随机数字,需要给随机数字乘以对应的倍数才可以。

这个结果就是大于0,小于1的小数:

三 造随机字符串

select md5(random()::text),f_string(5) from generate_series(1,10);

使用MD5的随机结果 值来构造 字符串。

四,重复字符

 select repeat(f_string(5),3) from generate_series(1,10);

repeat 来造相同的数据

五 造汉字

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;

select gen_hanzi(10) from  generate_series(1,10);

六  实际使用

create table testdata(id integer,name varchar(20),course int,grade numeric(4,2),testtime date,note text);  CREATE TABLE  insert into testdata  select generate_series(1,100) as id,   f_random_str(3+(random()*5)::integer) as name, 

 (random()*100)::integer as course, 

 (random()*99)::numeric(4,2) as grade, 

now() - ((random()*1000)::integer||' day')::interval as testtime, 

gen_hanzi(3+(random()*5)::integer) as note; 

INSERT 0 100 

select * from testdata;

根据以上操作,适当修改最大值最大值和最小值,就可以生成想要的行数的数据。

你学会了吗?

如果你喜欢今天的文章,欢迎点赞,关注。

参考链接:

www.jianshu.com/p/d465a4c74…