generate_seriesを使って大量データ作成

PostgreSQL
20180122-1

PostgreSQLの連続値生成関数であるgenerate_seriesを利用することで、大量データを作成が容易になります。

本記事では、他の関数や計算を利用して様々なデータを作成の仕方を具体的に紹介します。

スポンサーリンク

既存テーブルに登録

INSERT-SELECTを利用して、既存テーブルにデータ登録してみます。

固定値やgenerate_seriesの値、その値を利用したりすることで様々なパターンのデータを登録できます。また、ランダム関数を利用して、規則的ではないデータを作成することもできます。

また、generate_seriesの第2引数の値を変えることで作成件数を調整することができます。

-- テーブル定義
¥d test1
               Table "public.test1"
 Column |  Type   | Collation | Nullable | Default
--------+---------+-----------+----------+---------
 c1     | integer |           |          |
 c2     | text    |           |          |
 c3     | text    |           |          |
 c4     | date    |           |          |
 c5     | integer |           |          |

-- データ登録(10件)
INSERT INTO test1
SELECT num                         c1 -- 生成値
      ,'1'                         c2 -- 定数
      ,to_char(num,'FM00000')      c3 -- 生成値を利用(IDなどの文字列)
      ,'20171231'::date + num      c4 -- 生成値を利用(日付)
      ,trunc(random()*10000)::int  c5 -- ランダム関数を利用
FROM   generate_series(1,10) num
;

-- 結果確認
SELECT * FROM test1;
 c1 | c2 |  c3   |     c4     |  c5
----+----+-------+------------+------
  1 | 1  | 00001 | 2018-01-01 | 5578
  2 | 1  | 00002 | 2018-01-02 |  720
  3 | 1  | 00003 | 2018-01-03 | 5164
  4 | 1  | 00004 | 2018-01-04 | 3933
  5 | 1  | 00005 | 2018-01-05 | 9796
  6 | 1  | 00006 | 2018-01-06 | 5797
  7 | 1  | 00007 | 2018-01-07 | 9682
  8 | 1  | 00008 | 2018-01-08 | 7676
  9 | 1  | 00009 | 2018-01-09 | 7680
 10 | 1  | 00010 | 2018-01-10 | 8556
(10 rows)
スポンサーリンク

新規テーブル作成と同時にデータ登録

CREATE AS SELECTを利用して、新規テーブル作成と同時にデータ登録をすることも可能です。

-- テーブル作成&データ登録(10件)
CREATE TABLE test1 AS
SELECT num                         c1 -- 生成値
      ,'1'                         c2 -- 定数
      ,to_char(num,'FM00000')      c3 -- 生成値を利用(IDなどの文字列)
      ,'20171231'::date + num      c4 -- 生成値を利用(日付)
      ,trunc(random()*10000)::int  c5 -- ランダム関数を利用
FROM   generate_series(1,10) num
;

-- 結果確認
SELECT * FROM test1;
 c1 | c2 |  c3   |     c4     |  c5
----+----+-------+------------+------
  1 | 1  | 00001 | 2018-01-01 | 9280
  2 | 1  | 00002 | 2018-01-02 | 2726
  3 | 1  | 00003 | 2018-01-03 | 1138
  4 | 1  | 00004 | 2018-01-04 | 7185
  5 | 1  | 00005 | 2018-01-05 | 6561
  6 | 1  | 00006 | 2018-01-06 | 8295
  7 | 1  | 00007 | 2018-01-07 | 5969
  8 | 1  | 00008 | 2018-01-08 | 5528
  9 | 1  | 00009 | 2018-01-09 | 4956
 10 | 1  | 00010 | 2018-01-10 | 6334
(10 rows)

-- テーブル定義
¥d test1
               Table "public.test1"
 Column |  Type   | Collation | Nullable | Default
--------+---------+-----------+----------+---------
 c1     | integer |           |          |
 c2     | text    |           |          |
 c3     | text    |           |          |
 c4     | date    |           |          |
 c5     | integer |           |          |

まとめ

大量データ作成に便利なgenerate_series関数、応用することで様々なバリエーションのデータを作成することができます。色々試してみましょう。

関連

タイトルとURLをコピーしました