はじめに
パフォーマンス性能を検証するために100万行のデータが必要でした。
これを作成するためにPostgreSQLの関数generate_series
を使用しました。
そのデータベースの作成からテーブルにデータを挿入するまでを備忘録的に記事にしました。
やりたいこと(作成イメージ)
今回の記事で作成するテーブル定義は以下の通りです。
サンプルなのでざっくりです。
- DB名:sample
- テーブル名:sample_renban
カラム名 | データ型 | NOT NULL | 列制約 |
---|---|---|---|
id | INTEGER | NOT NULL | PRYMARY KEY |
val1 | varchar(10) | NOT NULL | - |
val2 | varchar(10) | NOT NULL | - |
val3 | varchar(10) | NOT NULL | - |
val4 | varchar(10) | NOT NULL | - |
val5 | varchar(10) | NOT NULL | - |
val6 | varchar(10) | NOT NULL | - |
val7 | varchar(10) | NOT NULL | - |
val8 | varchar(10) | NOT NULL | - |
val9 | varchar(10) | NOT NULL | - |
val10 | varchar(10) | NOT NULL | - |
このテーブルに下記のイメージでidカラムに1〜100万の連番の数字をつけた行を一気に挿入します。
id | val1 | val2 | val3 | val4 | val5 | val6 | val7 | val8 | val9 | val10
-------+------+------+------+------+------+------+------+------+------+-------
1 | aaa | aaa | aaa | aaa | aaa | aaa | aaa | aaa | aaa | aaa
2 | aaa | aaa | aaa | aaa | aaa | aaa | aaa | aaa | aaa | aaa
3 | aaa | aaa | aaa | aaa | aaa | aaa | aaa | aaa | aaa | aaa
4 | aaa | aaa | aaa | aaa | aaa | aaa | aaa | aaa | aaa | aaa
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
999998| aaa | aaa | aaa | aaa | aaa | aaa | aaa | aaa | aaa | aaa
999999| aaa | aaa | aaa | aaa | aaa | aaa | aaa | aaa | aaa | aaa
1000000| aaa | aaa | aaa | aaa | aaa | aaa | aaa | aaa | aaa | aaa
バージョン情報
- postgreSQL version 11.3
- Mac OS Mojave10.14.6
尚、homebrowでpostgreSQLを導入しています。
windowsでもpostgresSQLがインストールされていて起動していれば実施可能です。
方法
実際には100万件で実施したのですがちょっと多いので
今回の記事は1,000行のデータを作成
します。
ターミナルのみを使用します。データベースが既にある方は5に飛んでください。
1.データベースにログインする
MacBook-Pro:~ hoge$ psql -d postgres
psql (11.3)
Type "help" for help.
2.データベースを作成する
postgres=# CREATE DATABASE sample;
CREATE DATABASE
3.データベースが作成されているか確認する
データベースの一覧を表示します。
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+--------+----------+---------+-------+-----------------------------------
sample | hoge | UTF8 | C | C |
今回はsample
という名前のものがあれば大丈夫です。
4.データベースを変更する
postgres=# \c sample
You are now connected to database "sample" as user "hoge".
5.テーブルを作成する
sample=# CREATE TABLE sample_renban(
sample(# id INTEGER NOT NULL PRIMARY KEY,
sample(# val1 varchar(10) NOT NULL,
sample(# val2 varchar(10) NOT NULL,
sample(# val3 varchar(10) NOT NULL,
sample(# val4 varchar(10) NOT NULL,
sample(# val5 varchar(10) NOT NULL,
sample(# val6 varchar(10) NOT NULL,
sample(# val7 varchar(10) NOT NULL,
sample(# val8 varchar(10) NOT NULL,
sample(# val9 varchar(10) NOT NULL,
sample(# val10 varchar(10) NOT NULL
sample(# );
CREATE TABLE
6.テーブルにデータを挿入する
sample=# insert into
sample-# sample_renban(id, val1, val2, val3, val4, val5, val6, val7, val8, val9, val10)
sample-# select
sample-# row_number() over() as id,
sample-# 'aaa' as val1,
sample-# 'aaa' as val2,
sample-# 'aaa' as val3,
sample-# 'aaa' as val4,
sample-# 'aaa' as val5,
sample-# 'aaa' as val6,
sample-# 'aaa' as val7,
sample-# 'aaa' as val8,
sample-# 'aaa' as val9,
sample-# 'aaa' as val10
sample-# from generate_series(1, 1000) as id
sample-# ;
INSERT 0 1000
※generate_series(1, 1000)
の1000を1000000にすれば100万行のデータが追加されます。
結果
下記のSQLを実行し、データを確認してみます。
select * from sample_renban;
id | val1 | val2 | val3 | val4 | val5 | val6 | val7 | val8 | val9 | val10
-------+------+------+------+------+------+------+------+------+------+-------
1 | aaa | aaa | aaa | aaa | aaa | aaa | aaa | aaa | aaa | aaa
2 | aaa | aaa | aaa | aaa | aaa | aaa | aaa | aaa | aaa | aaa
3 | aaa | aaa | aaa | aaa | aaa | aaa | aaa | aaa | aaa | aaa
4 | aaa | aaa | aaa | aaa | aaa | aaa | aaa | aaa | aaa | aaa
5 | aaa | aaa | aaa | aaa | aaa | aaa | aaa | aaa | aaa | aaa
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1000 | aaa | aaa | aaa | aaa | aaa | aaa | aaa | aaa | aaa | aaa
できました!!