小编典典

带有随机插入的PostgreSQL循环

sql

我在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语句?我对这些东西很新鲜,并试图在这里用其他答案来解决类似的问题,但是找不到适合我的简单答案。

我将衷心感谢您的帮助。

最好的问候,马克斯


阅读 191

收藏
2021-04-15

共1个答案

小编典典

我通常使用的是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”的唯一字符串。

  • round(random()*70) -您需要四舍五入,因为random()返回的浮点值介于0和1之间。

  • (ARRAY['f','m'])[round(random())+1] -对于枚举等,构建一个数组并为其生成一个随机索引

  • now() + round(random()*1000) * '1 second'::interval-获取基准日期并添加随机时间间隔

2021-04-15