これまでテスト用にたくさんデータを作成する時は、
PythonやらNode.jsやらでプログラムを書いてた。
PostgreSQLならgenerate_seriesという連続値生成関数を利用することで
SQLだけで手軽にデータ生成できる、ということを発見したので、
今回は上記の記事と同じようなテストデータをSQLで作成してみる。
環境はPostgreSQL 9.5。
下記のようなテーブルを作成する。
drop table if exists bulk_test_items; create table bulk_test_items( id serial not null, item_cd varchar(100), name varchar(100), created timestamp default current_timestamp, primary key(id) );
そして、generate_seriesとinsert-selectを組み合わせたデータ生成SQLを作成する。
insert into bulk_test_items(item_cd, name, created) select to_char(i, 'FM0000000000'), format('テスト商品%s', i), clock_timestamp() from generate_series(1, 10) as i ;
これで下記のようなデータが生成される:
id | item_cd | name | created ----+-------------+--------------+---------------------------- 1 | 0000000001 | テスト商品1 | 2016-11-02 00:42:30.138823 2 | 0000000002 | テスト商品2 | 2016-11-02 00:42:30.147692 3 | 0000000003 | テスト商品3 | 2016-11-02 00:42:30.14774 4 | 0000000004 | テスト商品4 | 2016-11-02 00:42:30.147766 5 | 0000000005 | テスト商品5 | 2016-11-02 00:42:30.147788 6 | 0000000006 | テスト商品6 | 2016-11-02 00:42:30.14781 7 | 0000000007 | テスト商品7 | 2016-11-02 00:42:30.147832 8 | 0000000008 | テスト商品8 | 2016-11-02 00:42:30.147855 9 | 0000000009 | テスト商品9 | 2016-11-02 00:42:30.147878 10 | 0000000010 | テスト商品10 | 2016-11-02 00:42:30.147901 (10 行)
なんて簡単なんでしょう。
generate_seriesに渡すパラメータを変更すれば数万件のデータも作成できる。
おわり
いいもの発見した、と思ってたら
既にもっと色々なパターンを紹介してくれている解説記事が公開されていた。
達人に学ぶ SQL徹底指南書 (CodeZine BOOKS)
- 作者: ミック
- 出版社/メーカー: 翔泳社
- 発売日: 2008/02/07
- メディア: 単行本(ソフトカバー)
- 購入: 54人 クリック: 1,004回
- この商品を含むブログ (78件) を見る