好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

使用postgresql 模拟批量数据插入的案例

创建表:

?

1

2

3

4

5

6

7

CREATE TABLE t_test(

   ID INT PRIMARY KEY    NOT NULL ,

   NAME       TEXT  NOT NULL ,

   AGE      INT    NOT NULL ,

   ADDRESS    CHAR (50),

   SALARY     REAL

);

模拟批量插入:

?

1

insert into t_test SELECT generate_series(1,5000000) as key ,repeat( chr(int4(random()*26)+65),4), (random()*(6^2)):: integer , null ,(random()*(10^4)):: integer ;

解释:

其中:

1、generate_series(1,5000000),表示生成一个数值序列,从1到5000000,步进为一。

generate_series作用可见下表:

2、repeat: 重复生成字符串的函数

repeat(s,n)返回一个由重复的字符串s组成的字符串,n表示重复生成的次数。若n<=0,则返回一个空字符串;若s或n为null,则返回null。

3、

select (random()*(6^2))::integer :随机数字 十位不超过6的两位数

select (random()*(10^4))::integer; 四位数

结果:

补充: postgresql 生成测试数据

此处,我简单的写一个例子,供参考(在Postgresql9.1下面做的):

(1)准备知识

针对 Postgres生成数据方法

生成序列

?

1

SELECT * FROM generate_series(1,5);

生成date

?

1

SELECT date (generate_series(now(), now() + '1 week' , '1 day' ));

生成integer 随机数

?

1

SELECT (random()*(2*10^9)):: integer ;

生成numeric 随机数

?

1

SELECT (random()*100.):: numeric (4,2);

生成字符串

?

1

SELECT substr( 'abcdefghijklmnopqrstuvwxyz' ,1,(random()*26):: integer );

生成重复串

?

1

SELECT repeat( '1' ,(random()*40):: integer );

举例:

?

1

SELECT generate_series(1,10) as key ,(random()*100.):: numeric (4,2),repeat( '1' ,(random()*25):: integer ) ORDER BY random();

结果:

?

1

2

3

4

5

6

7

8

9

10

11

12

-- 生成随机汉字符串 

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;

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。如有错误或未考虑完全的地方,望不吝赐教。

原文链接:https://blog.csdn.net/qq_35462323/article/details/109614195

查看更多关于使用postgresql 模拟批量数据插入的案例的详细内容...

  阅读:46次