使用postgresql 模擬批量資料插入的案例
阿新 • • 發佈:2021-01-15
建立表:
CREATE TABLE t_test( ID INT PRIMARY KEY NOT NULL,NAME TEXT NOT NULL,AGE INT NOT NULL,ADDRESS CHAR(50),SALARY REAL );
模擬批量插入:
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生成資料方法
生成序列
SELECT * FROM generate_series(1,5);
生成date
SELECT date(generate_series(now(),now() + '1 week','1 day'));
生成integer 隨機數
SELECT (random()*(2*10^9))::integer;
生成numeric 隨機數
SELECT (random()*100.)::numeric(4,2);
生成字串
SELECT substr('abcdefghijklmnopqrstuvwxyz',1,(random()*26)::integer);
生成重複串
SELECT repeat('1',(random()*40)::integer);
舉例:
SELECT generate_series(1,10) as key,(random()*100.)::numeric(4,2),repeat('1',(random()*25)::integer) ORDER BY random();
結果:
-- 生成隨機漢字串 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;
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援我們。如有錯誤或未考慮完全的地方,望不吝賜教。