質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Q&A

解決済

3回答

3722閲覧

Postgresでの大量のテストデータの作成方法

oze

総合スコア14

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

0グッド

0クリップ

投稿2019/03/12 08:09

負荷テスト用に1億件ほどのテストデータの作成方法を考えております。
SE歴半年ほどの初心者です、至らぬ点などあると思います。

条件
・カラムは500程度
・各カラムの最大桁数のデータ(0埋めで良い)
・PKは連番(最大桁数を0埋めしつつ)が一番楽そう
・使用するデータ型は以下

  • char
  • numeric
  • int
  • timestamp 
  • date
  • time

試したこと
・Excelのオートフィルを使って100万件ずつデータ作成
→メモリが不足しており実行できない(保存もコピーも行えずPCフリーズ)

・A5mk2ツールのダミーデータ作成機能を使用
→1億件作成できるが1件登録するのに約1.4秒かかる(1億件登録するまでに約3年半かかる)

考えていること(実装できるかどうかは分からない)
・マクロを作成する
→一度に1億回繰り返すとフリーズすること間違いなしなので5万件ずつcsvファイルを作成してバッチで動かすとか?

・スクリプトを作成する
→Powershellで作成できる自信がない(・・・やったことがない)

教えて頂きたいこと
全く良い発想が浮かばないので何でもいいのでご教示頂きたいです。
ソースコードの例など頂けるととてもありがたいです、お願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yoorwm

2019/03/12 08:23

データによりますが、SQLで直積を利用すると比較的楽にデータを増殖できますね。 これで分からなかったら、具体的なデータ形式を追記すると良いかと思います。
oze

2019/03/12 08:45

回答ありがとうございます。 PK制約に引っかかる恐れがあるので、何かしらの方法を考えて一度実施してみようと思います。
guest

回答3

0

ベストアンサー

PostgreSQL: 集合を返すGENERATE_SERIES関数で大量データを生成して集計する
上記が参考になるでしょう。

但し、1億件ともなると、分割コミットを考慮しないと駄目でしょうね
単純なものなら、複数のバッチをパラレル(開始位置はずらす)で実行可能でしょう。
複雑な場合は、ストアドにした方が良いと思います。
CPU負荷率が80%程度になるくらいまではパラレル実行しても問題ないと思います。

投稿2019/03/12 09:05

編集2019/03/13 01:25
sazi

総合スコア25188

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

数値的な繰り返しデータであれば、
9.24. 集合を返す関数
generate_series()が使いやすいのですが。

テストデータの投入に際しては、
14.4. データベースへのデータ投入
にある項目を点検すると良いかも。

投稿2019/03/12 08:32

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

oze

2019/03/12 08:42

PKのみgenerate_series()で連番(最大桁数でデータを登録したいので100000001~200000000で行う?)で、その他は0埋めできそうですね、助かります。 回答ありがとうございました。
guest

0

全部同じデータでいいなら

  1. テーブルを2つ用意しますA,B
  2. A、Bにそれぞれ同じデータでいいので1個ダミーデータを入れます
  3. AにBを流し込み、BにAを流し込み、またAにBを・・・
  4. 上記40回くらい繰り返すと1億くらいのデータはすぐです

ドラえもんのバイバインみたいなもので、意外とデータはすぐ肥大化するものです

投稿2019/03/12 08:24

yambejp

総合スコア114829

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

oze

2019/03/12 08:40

全くなかった発想で驚きました。 PK制約にひっかかる恐れがあるので何かしらの工夫をして一度試してみます。 回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問