2017-08-07 6 views
0

とPostgreSQLのループは、私は、DB内のテーブルを持っている:ランダム挿入

CREATE TABLE operation (<br> 
    id  integer NOT NULL DEFAULT NEXTVAL ('seq_operation'),(<br> 
    phone_number  varchar(30),(<br> 
    age  integer,(<br> 
    gender  char(1),(<br> 
    isActive  boolean,(<br> 
    date_of_surgery  timestamp,(<br> 
); 

は私がランダムデータで10000行を挿入する必要があります。どのようにINSERT文を作成できますか?私はこの物を新鮮にして、ここで似たような質問をするために他の答えを見つけようとしていますが、わかりやすいものは見つけられません。

本当にありがとうございます。私は通常、このようなものを使用

敬具、 マックス

+0

それを行うには多くの方法。 10000のループは、ループ内で、データを持つダミーオブジェクト(操作)を作成し、次にJDBCを使用して単一の挿入を行います。それでおしまい。または10000個のオブジェクトを作成してそれらを挿入するループ! – Zico

+0

のようないくつかの擬似咬傷サイトを使用してください:https://www.mockaroo.com/ –

答えて

1

はpsqlのである:あなたのケースでは

INSERT INTO table (values, to, fill) 
SELECT random(), random(), random() from generate_series(1,10000); 

、これは以下のようになります。

INSERT INTO operation ( 
    phone_number, 
    age, 
    gender, 
    isActive, 
    date_of_surgery 
) SELECT 
    'some-phone-' || round(random()*1000), -- for text 
    round(random()*70), -- for integer 
    (ARRAY['f','m'])[round(random())+1], -- for char/enum 
    (ARRAY[false,true])[round(random())+1], -- for boolean 
    now() + round(random()*1000) * '1 second'::interval -- for timestamps 
FROM generate_series(1,10000); 

もう少し説明。

  • generate_seriesもあなたはそれが生成 値にアクセスすることができ、あなたのループを提供します。それらは今必要ではありません。

  • 'text' || round(random()*1000)は、 'text-1212'のようなユニークな 文字列を生成できます。

  • round(random()*70) - 列挙と同様のため、 配列を作成し、それのためのランダムなインデックスを生成する - あなたは)(ランダム

  • (ARRAY['f','m'])[round(random())+1] 0と1の間の floting点の値を返すため、丸めるする必要があります

  • now() + round(random()*1000) * '1 second'::interval - ベースライン の日付を取得し、ランダム時間intervalsを追加します。

fiddle

+0

あなたは最高です! 2つの質問がありますが、あなたの質問から、私は2017-08-07T12:30:37.400894Zのような日付フォーマットを取得します。もし私が欲しいのは、2017-08-07T12:30:37? あなたはgenerate_seriesが生成する値にアクセスできると言っています。どうすればいいですか? –

+0

'date_trunc'を使用すると、タイムスタンプを特定の精度で切り捨てることができます。 generate_seriesの別名を割り当てた場合は、SELECTリストでそのエイリアスを使用できます。例えば ​​'SELECT a FROM generate_series(1,10)AS a; ' –

+0

ありがとう!すべて今クリアする。 –