PSQL生成随机数据程序
PSQL generate aleatory data procedure
我需要创建一个没有 generate_series 的存储过程,其中可能将 100,000 条记录随机插入到一个简单的 table 中。我留下一个例子 table 所以你可以告诉我你会怎么做
create table test(
id serial primary key,
name varchar(20),
int number,
birth datetime
);
对于那个 table,您将如何在一个过程中随机生成 100,000 条记录?找了两个小时没找到方法
一个快速而肮脏的解决方案。效率不是特别高。也不确定您实际希望数据是什么样子。还是起点:
create table test(
id serial primary key,
name varchar(20),
number integer,
birth date
);
DO $$
DECLARE
name_val varchar(20);
number_val integer;
birth_val date;
BEGIN
for i in 1..10 LOOP
name_val = repeat('se', (random() * 10)::int);
number_val = random() * 1000;
birth_val = (current_date - (random() * 300)::int) - ((((random() * 10) * 3)::int)::varchar || ' years')::interval;
INSERT INTO test (name, number, birth) values(name_val, number_val, birth_val);
END LOOP;
END;
$$
;
select * from test;
id | name | number | birth
----+----------------------+--------+------------
1 | sesesesesesesese | 376 | 1997-02-16
2 | se | 318 | 2009-02-16
3 | sesesesese | 518 | 1997-02-16
4 | | 605 | 1993-02-16
5 | sesesesesesesesese | 842 | 1998-02-16
6 | sesesesesesesese | 219 | 2015-02-16
7 | sesesese | 7 | 2017-02-16
8 | sesesesesesesesesese | 477 | 2014-02-16
9 | sesesesesese | 690 | 2013-02-16
10 | se | 796 | 2011-02-16
出于演示目的做了 1..10 LOOP。
我需要创建一个没有 generate_series 的存储过程,其中可能将 100,000 条记录随机插入到一个简单的 table 中。我留下一个例子 table 所以你可以告诉我你会怎么做
create table test(
id serial primary key,
name varchar(20),
int number,
birth datetime
);
对于那个 table,您将如何在一个过程中随机生成 100,000 条记录?找了两个小时没找到方法
一个快速而肮脏的解决方案。效率不是特别高。也不确定您实际希望数据是什么样子。还是起点:
create table test(
id serial primary key,
name varchar(20),
number integer,
birth date
);
DO $$
DECLARE
name_val varchar(20);
number_val integer;
birth_val date;
BEGIN
for i in 1..10 LOOP
name_val = repeat('se', (random() * 10)::int);
number_val = random() * 1000;
birth_val = (current_date - (random() * 300)::int) - ((((random() * 10) * 3)::int)::varchar || ' years')::interval;
INSERT INTO test (name, number, birth) values(name_val, number_val, birth_val);
END LOOP;
END;
$$
;
select * from test;
id | name | number | birth
----+----------------------+--------+------------
1 | sesesesesesesese | 376 | 1997-02-16
2 | se | 318 | 2009-02-16
3 | sesesesese | 518 | 1997-02-16
4 | | 605 | 1993-02-16
5 | sesesesesesesesese | 842 | 1998-02-16
6 | sesesesesesesese | 219 | 2015-02-16
7 | sesesese | 7 | 2017-02-16
8 | sesesesesesesesesese | 477 | 2014-02-16
9 | sesesesesese | 690 | 2013-02-16
10 | se | 796 | 2011-02-16
出于演示目的做了 1..10 LOOP。