我在db中有一个表:
CREATE TABLE operation ( <br>
id integer NOT NULL DEFAULT NEXTVAL ('seq_operation'),( <br>
phone_number varchar(30),( <br>
age integer,( <br>
gender char(1),( <br>
isActive boolean,( <br>
date_of_surgery timestamp,( <br>
);
我需要插入10000行随机数据。我怎样才能做出这样的INSERT语句?我对这些东西感到很新鲜,并尝试用其他答案来解决这个类似问题,但是找不到容易理解的问题。
我真的很感谢你的帮助。
祝你好运, 最大
答案 0 :(得分:3)
我通常使用这样的东西是psql:
INSERT INTO table (values, to, fill)
SELECT random(), random(), random() from generate_series(1,10000);
在您的情况下,这将是:
INSERT INTO operation (
phone_number,
age,
gender,
isActive,
date_of_surgery
) SELECT
'some-phone-' || round(random()*1000), -- for text
round(random()*70), -- for integer
(ARRAY['f','m'])[round(random())+1], -- for char/enum
(ARRAY[false,true])[round(random())+1], -- for boolean
now() + round(random()*1000) * '1 second'::interval -- for timestamps
FROM generate_series(1,10000);
更多解释。
generate_series会为您提供循环,也可以访问 它产生的价值。现在不需要那些。
'text' || round(random()*1000)
可以生成&text; 1212&#39; -like unique
字符串。
round(random()*70)
- 你需要舍入,因为random()返回一个
浮点数值介于0和1之间。
(ARRAY['f','m'])[round(random())+1]
- 对于枚举等,构建一个
数组并为其生成随机索引
now() + round(random()*1000) * '1 second'::interval
- 获取基线
日期并添加随机时间intervals。
(fiddle)