postgresql测试常用方法

参考资料

Postgresql生成大量测试数据

针对 Postgres生成数据方法

<1>生成序列====》           SELECT * FROM generate_series(1,5);

<2>生成date====》    SELECT date(generate_series(now(), now() + '1 week', '1 day'));

 

<3>生成integer 随机数=》 SELECT (random()*(2*10^9))::integer;

<4>生成numeric 随机数=》select (random()*100)::numeric(4,2);

<5>生成字符串==》     select substr('abcdefghijklmnopqrstuvwxyz',1,(random()*26)::integer);

<6>生成重复串==>    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();

 key | numeric |          repeat          
-----+---------+--------------------------
   8 |   26.04 | 111
  10 |   83.44 | 1
   9 |   46.72 | 
   3 |   57.84 | 1111111111111
   4 |   29.61 | 1111111111111111111
   5 |   11.32 | 1111111111111
   7 |   69.69 | 
   2 |   42.23 | 11111111111111111
   6 |   12.32 | 111111111111111111111111
   1 |   84.92 | 111111

二、

如果您想知道执行该sql的时间,请在执行上述命令前设置:
postgres=# \timing on
Timing is on.
(1)测试参考SQL,可以把生成的随机值改的大一些;

#生成新表===>

select i,'text:'||i as text into test from generate_series(1,10) as i;

#在新表中插入测试数据===>

insert into test(i,text) select i,'text:'||i from generate_series(1,10) as i;

(2)查看表test占用的存储空间


若查看其中的index的空间或整个relation的空间,请参考:

http://www.postgresql.org/docs/9.1/static/functions-admin.html 

          或:http://www.postgresql.org/docs/9.1/static/functions-admin.html

postgresql 时区与时间函数


--把时间戳转成epoch值
postgres=# select extract(epoch from now());
    date_part     
------------------
 1447898857.74524
(1 row)
 
 
--把epoch 值转换回时间戳
postgres=# SELECT TIMESTAMP WITH TIME ZONE 'epoch' +  1447898857.74524 * INTERVAL '1 second';           
           ?column?           
------------------------------
 2015-11-19 10:07:37.74524+08
 
 
 postgres=# SELECT TIMESTAMP WITH TIME ZONE 'epoch' +  1447898857.74524 * INTERVAL '1 second';           
           ?column?           
------------------------------
 2015-11-19 10:07:37.74524+08
 
 --查看当前的时间戳
postgres=# select clock_timestamp(),current_timestamp,localtimestamp;
        clock_timestamp        |              now              |         timestamp          
-------------------------------+-------------------------------+----------------------------
 2016-02-02 17:54:15.547194+08 | 2016-02-02 17:54:15.546956+08 | 2016-02-02 17:54:15.546956
 
--时间加减
postgres=# select date '2016-02-02 10:00:00'+ interval '10 minutes'; 
      ?column?       
---------------------
 2016-02-02 00:10:00
 
 
 
--直接用sql生成随机日期时间
select '2015-5-1'::date + trunc(random()*100)::integer +' 00:22:22'::time + (trunc(random()*3600*24)||' second')::interval; 
 
--不同时区之间的转换
postgres=# select '2016-02-03 09:07:30.816885+08' at time zone 'pst';
          timezone          
----------------------------
 2016-02-02 17:07:30.816885
(1 row)
 
postgres=# select '2016-02-03 09:07:30.816885+08' at time zone 'cct';
          timezone          
----------------------------
 2016-02-03 09:07:30.816885
(1 row)
  
postgres=#  SELECT TIMESTAMP WITH TIME ZONE '2001-02-16 20:38:40-05' AT TIME ZONE 'cct';
      timezone       
---------------------
 2001-02-17 09:38:40
 
--查看系统支持的时区
 select * from pg_timezone_names ; 
 
 --时区设置参数
timezone = 'PRC'
 
--修改时区的方法
1. 全局参数
postgresql.conf
timezone='UTC'
 
2. 数据库级配置
alter database dbname set timezone='UTC';
 
pipeline=# select * from pg_db_role_setting ;
 setdatabase | setrole |              setconfig               
-------------+---------+--------------------------------------
       14930 |       0 | {TimeZone=UTC}
 
3. 用户级配置
alter role rolname set timezone='UTC';
或者
alter role all set timezone='UTC';
 
pipeline=# select * from pg_db_role_setting ;
 setdatabase | setrole |              setconfig               
-------------+---------+--------------------------------------
       14930 |       0 | {TimeZone=UTC}
           0 |       0 | {TimeZone=UTC}
  
 --创建随机日期时间函数       
   CREATE OR REPLACE FUNCTION rand_date_time(start_date date, end_date date) RETURNS TIMESTAMP AS  
$BODY$  
 DECLARE  
    interval_days integer;  
    random_seconds integer;  
random_dates integer;  
    random_date date;  
    random_time time;
    
BEGIN  
    interval_days := end_date - start_date;  
    random_dates:= trunc(random()*interval_days);
    random_date := start_date + random_dates; 
    random_seconds:= trunc(random()*3600*24); 
    random_time:=' 00:00:00'::time+(random_seconds || ' second')::INTERVAL;
    RETURN random_date +random_time;  
END;   
$BODY$  
LANGUAGE plpgsql;  
--生成指定时间内的随机时间
SELECT rand_date_time('2000-01-01', '2013-12-31');  
 
 
--休眠1.5秒后执行,单位秒
SELECT clock_timestamp(),pg_sleep(1.5),clock_timestamp();
--休眠5分钟,单位interval
SELECT clock_timestamp(),pg_sleep_for('5 minutes'),clock_timestamp();
--到指定时间执行,注意这些休眠时间不是完全精确的
SELECT clock_timestamp(),pg_sleep_until('today 10:00'),clock_timestamp();

猜你喜欢

转载自blog.csdn.net/cdnight/article/details/83504686