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関数、応用することで様々なバリエーションのデータを作成することができます。色々試してみましょう。
関連


