dbtestdata
MySQL専用です!!
データベースにダミーのテストデータを挿入したり、
すでにあるデータをダミー化したり、不要なデータを削除したりできます。
どのようなダミー化を行うかは設定ファイルで定義します。
dbtestdata/ ディレクトリの内容があれば動作します。
チェックアウトしてご利用下さい。
コマンドラインの起動の方法
perl \
  dbtestdata.pl \
    insert \
    --username=root \
    --password \
    --database=hogedb \
    --conf=./conf1.pl \
    --conf=./conf2.pl
コマンドライン引数の説明
- insert|update|delete - データの挿入 or ダミー化 or 不要データ削除 のいずれかの動作モードを選択します。
- --username - データベースのユーザ名。
- --password - データベースにパスワードがかかっているならこれを指定してください。
- --database - ターゲットのデータベース名。
- --conf=FILE名 - 設定ファイル名。複数個指定できます。
設定ファイルについて
通常のperlスクリプトです。以下のようなデータ構造をreturnしてください。必ずutf8で記述すること。
{
  name => この定義の名前,
  insert => {                           …insert動作モード用の設定です。
    テーブル名1 => {
      count => 作成レコード数,
      clazz => {
        カラム名1 => データ生成関数,
        カラム名2 => データ生成関数
      }
    },
    テーブル名2 => {
    },
    ...
  },
  update => {                           …update動作モード用の設定です。
    テーブル名1 => {
      primary => 主キーカラム名,
      clazz => {
        カラム名1 => データ生成関数,
        カラム名2 => データ生成関数
      }
    },
    テーブル名2 => {
    },
    ...
  },
  delete => [                           …delete動作モード用の設定です。
    レコードを全削除したいテーブル名1,
    レコードを全削除したいテーブル名2,
    ...
  ]
}
データ生成関数
これらが使えます。
RANDOM_LITERAL
RANDOM_INTEGER
RANDOM_DOUBLE
RANDOM_ALPHA
RANDOM_JA_KATAKANA
RANDOM_JA_HIRAGANA
RANDOM_JA_PREF
RANDOM_JA_NAME_KAN
RANDOM_JA_FIRSTNAME_KAN
RANDOM_JA_FAMILYNAME_KAN
RANDOM_JA_ZIPCODE
RANDOM_JA_TEL
RANDOM_DATETIME
RANDOM_EMAIL
PERL
LITERAL
COUNTER
CONCAT
SPRINTF
FOLD
SQL
詳細については以下のファイルの関数コメントを参照して下さい。
- data/VariableDataGenerator.pm
- sql/VariableSQLGenerator.pm
package example1;
use strict;
use warnings;
use data::VariableDataGenerator;
use sql::VariableSQLGenerator;
use utf8;
return {
  name => __PACKAGE__,
  update => {
    t_user => {
      primary => "id",
      clazz => {
        age                       => RANDOM_INTEGER(70, 15),
        card_types_id             => RANDOM_LITERAL(0, 5),
        card_id                   => RANDOM_INTEGER(180, 1),
        level                     => RANDOM_INTEGER(99, 1),
        modified                  => RANDOM_DATETIME("2011-01-01", "2011-12-31"),
        created                   => SQL('NOW()')
      }
    },
    t_order => {
      primary => "id",
      clazz => {
        t_user_id                 => RANDOM_INTEGER(50000, 1),
        price                     => RANDOM_INTEGER(100000, 1000),
        item_id                   => RANDOM_INTEGER(180, 1),
        modified                  => RANDOM_DATETIME("2011-01-01", "2011-12-31"),
        created                   => SQL('NOW()')
      }
    }
  },
  delete => [ qw(
    t_mail_log
    t_credit_card_log
  )]
};
- 2011/02/03 初版
- 2011/02/17 設定ファイルの形式を変更しinsertとupdateを分離した。
- ryer