PostgreSQL循环随机插入

时间:2017-08-07 11:14:39

标签: java sql eclipse postgresql

我在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语句?我对这些东西感到很新鲜,并尝试用其他答案来解决这个类似问题,但是找不到容易理解的问题。

我真的很感谢你的帮助。

祝你好运, 最大

1 个答案:

答案 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