持续创作,加速成长!这是我参与「掘金日新计划 · 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;
根据以上操作,适当修改最大值最大值和最小值,就可以生成想要的行数的数据。
你学会了吗?
如果你喜欢今天的文章,欢迎点赞,关注。