PostgreSQL中有一个很有用处的内置函数generate_series,可以按不同的规则用来产生一系列的填充数据。
一、语法 generate_series(start,stop)--int or bigintgenerate_series(start,stop,step) --int or bigintgenerate_series(start,stop, step interval) --timestamp or timestamp with time zone
二、应用例子 1.int类型,不写步长时默认是1postgres=# select generate_series(1,10); generate_series ----------------- 1 2 3 4 5 6 7 8 910(10 rows)postgres=# select generate_series(1,10,3); generate_series ----------------- 1 4 710(4 rows)postgres=# select generate_series(5,1); generate_series -----------------(0 rows)postgres=# select generate_series(5,1,-1); generate_series ----------------- 5 4 3 2 1(5 rows)2.时间类型postgres=# select generate_series(now(),now() + "7 day","1 day");generate_series------------------------------- 2012-08-27 22:12:40.915368+08 2012-08-28 22:12:40.915368+08 2012-08-29 22:12:40.915368+08 2012-08-30 22:12:40.915368+08 2012-08-31 22:12:40.915368+08 2012-09-01 22:12:40.915368+08 2012-09-02 22:12:40.915368+08 2012-09-03 22:12:40.915368+08(8 rows)postgres=# select generate_series(to_date("20120827","yyyymmdd"),to_date("20120828","yyyymmdd"),"3 h");generate_series ------------------------ 2012-08-27 00:00:00+08 2012-08-27 03:00:00+08 2012-08-27 06:00:00+08 2012-08-27 09:00:00+08 2012-08-27 12:00:00+08 2012-08-27 15:00:00+08 2012-08-27 18:00:00+08 2012-08-27 21:00:00+08 2012-08-28 00:00:00+08(9 rows) 3.IP类型postgres=# create table t_kenyon(id int,ip_start inet,ip_end inet);CREATE TABLEpostgres=# insert into t_kenyon values(1,"192.168.1.254","192.168.2.5");INSERT 0 1postgres=# insert into t_kenyon values(2,"192.168.2.254","192.168.3.5");INSERT 0 1postgres=# insert into t_kenyon values(3,"192.168.3.254","192.168.4.5");INSERT 0 1postgres=# select * from t_kenyon; id | ip_start| ip_end----+---------------+-------------1 | 192.168.1.254 | 192.168.2.51 | 192.168.2.254 | 192.168.3.51 | 192.168.3.254 | 192.168.4.5(3 rows)postgres=# select id,generate_series(0,ip_end-ip_start)+ip_start as ip_new from t_kenyon; id |ip_new ----+---------------1 | 192.168.1.2541 | 192.168.1.2551 | 192.168.2.01 | 192.168.2.11 | 192.168.2.21 | 192.168.2.31 | 192.168.2.41 | 192.168.2.52 | 192.168.2.2542 | 192.168.2.2552 | 192.168.3.02 | 192.168.3.12 | 192.168.3.22 | 192.168.3.32 | 192.168.3.42 | 192.168.3.53 | 192.168.3.2543 | 192.168.3.2553 | 192.168.4.03 | 192.168.4.13 | 192.168.4.23 | 192.168.4.33 | 192.168.4.43 | 192.168.4.5(24 rows)
三、总结
Pg的generate_series函数对生成测试数据,批量更新一定规则的数据有比较多的应用场景,使用得当可提升开发效率。另外IP的序列生成也是PG的一个亮点。
有两种情况不能生成数据:
1.步长为正,且开始值比结束值大
2.步长为负,且开始值比结束值小PostgreSQL的执行计划分析MySQL的伪行级锁相关资讯 PostgreSQL
- Ubuntu 16.04 下安装 PostgreSQL (08月14日)
- PostgreSQL 发布全系安全更新 (02月12日)
- 使用pg_basebackup搭建PostgreSQL (12/30/2015 09:00:29)
| - Linux下RPM包方式安装PostgreSQL (03月04日)
- PostgreSQL9.5新特性之行级安全性 (01月19日)
- 利用pgpool实现PostgreSQL的高可用 (12/30/2015 08:54:36)
|
本文评论 查看全部评论 (0)