2017/12/07
PostgreSQLの連続値生成関数であるgenerate_seriesを利用することで、大量データを作成が容易になります。
本記事では、他の関数や計算を利用して様々なデータを作成の仕方を具体的に紹介します。
sponsored link
既存テーブルに登録
INSERT-SELECTを利用して、既存テーブルにデータ登録してみます。
固定値やgenerate_seriesの値、その値を利用したりすることで様々なパターンのデータを登録できます。また、ランダム関数を利用して、規則的ではないデータを作成することもできます。
また、generate_seriesの第2引数の値を変えることで作成件数を調整することができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
-- テーブル定義 ¥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を利用して、新規テーブル作成と同時にデータ登録をすることも可能です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
-- テーブル作成&データ登録(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関数、応用することで様々なバリエーションのデータを作成することができます。色々試してみましょう。
関連