LoginSignup
3
3

More than 3 years have passed since last update.

【PostgreSQL】連番の大量データを作成する(generate_series関数)

Posted at

はじめに

パフォーマンス性能を検証するために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

できました!!

 参考

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3