雑念ストレージ

プログラミング関連のメモとか

【Postgresql】generate_series関数でダミーデータを作る

generate_seriesという関数がダミーデータを作るのに便利で、度々使ってます。

例えば以下のような感じで、簡単に行を生成できます。

SELECT generate_series(1, 10, 1); /* 1から10まで1ずつ増やす */
/*
 generate_series 
-----------------
               1
               2
               3
               4
               5
               6
               7
               8
               9
              10
(10 rows)
*/

これをFROM句に指定すれば、簡単にレコードを量産できます。

SELECT
  series AS id
  , 'hoge' AS value
FROM
  generate_series(1, 10, 1) series
;
/*
 id | value 
----+-------
  1 | hoge
  2 | hoge
  3 | hoge
  4 | hoge
  5 | hoge
  6 | hoge
  7 | hoge
  8 | hoge
  9 | hoge
 10 | hoge
(10 rows)
*/

増分を変えてみたり、、

SELECT
  series AS id
  , 'hoge' AS value
FROM
  generate_series(1, 10, 2) series /* 2ずつ増やす */
;
/*
 id | value 
----+-------
  1 | hoge
  3 | hoge
  5 | hoge
  7 | hoge
  9 | hoge
(5 rows)
*/

日付や時刻を引数に指定することもできます。

SELECT generate_series(
    '2019-01-01 00:00'::timestamp
    , '2019-01-07 00:00'::timestamp
    , '1 day');
/*
   generate_series   
---------------------
 2019-01-01 00:00:00
 2019-01-02 00:00:00
 2019-01-03 00:00:00
 2019-01-04 00:00:00
 2019-01-05 00:00:00
 2019-01-06 00:00:00
 2019-01-07 00:00:00
(7 rows)
*/
SELECT generate_series(
    '2019-01-01 00:00'::timestamp
    , '2019-01-01 05:00'::timestamp
    , '1 hour');
/*
   generate_series   
---------------------
 2019-01-01 00:00:00
 2019-01-01 01:00:00
 2019-01-01 02:00:00
 2019-01-01 03:00:00
 2019-01-01 04:00:00
 2019-01-01 05:00:00
(6 rows)
*/

日付や時刻を扱うときは第3引数がinterval型になるので、 '1 days' なんて書きかたができます。 (interval型の記法は8.5. 日付/時刻データ型を参考に)

random関数とかを絡めれば、もっと自然なダミーデータを作れそう。

便利!