PostgreSQL の generate_series 関数

PostgreSQL には generate_series という集合を返すことができる すごい便利な関数があります。

[参考サイト]
集合を返す関数 - PostgreSQL 8.4.4文書

次のように使うことができます。

db=# SELECT * FROM generate_series(1, 5);

 generate_series
-----------------
               1
               2
               3
               4
               5

ステップも入れられます。

db=# SELECT * FROM generate_series(1, 5, 2);

 generate_series
-----------------
               1
               3
               5

TIMESTAMP 型もいけます。

db=# SELECT * FROM generate_series(
db-#     '2013/01/01'::TIMESTAMP, '2013/01/03', '1 day');

 generate_series
---------------------
 2013-01-01 00:00:00
 2013-01-02 00:00:00
 2013-01-03 00:00:00

FROM 句に書かない使い方もできます。

db=# SELECT generate_series(1, 3);

 generate_series
-----------------
               1
               2
               3

集合を返す、というところがすごいところで 次のように別の集合と一緒に使えば 直積などの集合の演算結果を簡単に取得することができます。

db=# SELECT f1 FROM tab1;

 f1
----
  1
  2
  3


db=# SELECT f1, generate_series(1, 3) FROM tab1;


 f1 | generate_series
----+-----------------
  1 |               1 
  1 |               2 
  1 |               3 
  2 |               1 
  2 |               2 
  2 |               3 
  3 |               1 
  3 |               2 
  3 |               3  

テストデータを作るときなどかなり役に立ちます。

Google サイト内検索

Amazonアソシエイト