2016-04-07 2 views
0

1つのSQLクエリを使用してPostgreSQLテーブルにテストデータを作成する方法はありますか?たとえば、私は、このテーブルにデータのいくつかの行を挿入したいと思います:PostgreSQLテーブルのテストデータ

CREATE TABLE RELEASE_PLANNING(
ID INTEGER NOT NULL, 
NAME TEXT, 
PLANNING_START_DATE DATE, 
PLANNING_END_DATE DATE, 
DESCRIPTION TEXT, 
LAST_UPDATE DATE, 
CREATED DATE 
) 
; 

が、私はこのコードをテストした

PreparedStatement ps = null; 
     boolean committed = false; 
     try 
     { 
      conn.setAutoCommit(false); 

      for (int i = 0; i < 20; i++) 
      { 
       int randomNum = 10 + (int) (Math.random() * 20000); 
       ps = conn.prepareStatement("INSERT INTO KNOWLEDGEBASE (ID, NAME) VALUES (?, generate_series(1,1000), md5(random()::text))"); 
       ps.setInt(1, randomNum); 
//    ps.setString(2, "Test_file"); 
       ps.executeUpdate(); 

      } 

      ps.close(); 

      conn.commit(); 
      committed = true; 
     } 

私はエラーに取得

org.postgresql.util.PSQLException:ERROR: INSERTにはターゲット列より多くの式があります 位置:7

+0

困難なやり方で、いくつかの挿入文を書くことができます。データはテストに適しています。 – jarlh

+0

しかし、1000行のランダムデータを挿入したいと思います。解決策はありますか? –

+0

私の標準的なやり方は、手動で10行を挿入してから、調整値を使ってテーブルからテーブル選択に挿入することです。数回、あなたは1000行以上あります。 – jarlh

答えて

2

エラーメッセージは、3列のデータを挿入しようとしていることを示しています)を2つの列(INSERT INTO KNOWLEDGEBASE (ID, NAME))に変換します。これがあなたのcreate tableステートメントで何をしなければならないかははっきりしません。ステートメントは、7つのカラムを持つ異なる名前のテーブルを作成します。

このような種類のクエリでは、100行が挿入されます。

insert into release_planning 
select n, 'a', current_date, current_date, 'a', current_date, current_date 
from generate_series (1, 100) n; 

あなたはランダムなデータが必要な場合は、最善のアプローチは、いくつかの関数を記述し、その文のselect句でそれらを使用することが考えられます。だから、私は(低、高)

  • random_integer、
  • random_date(ロー、ハイ)、および
  • random_string(長さ)、

を書いて、このようにそれらを呼ぶかもしれません。

insert into release_planning 
select n, 
     random_string(35), 
     current_date, 
     random_date(current_date, date '2016-12-31'), 
     random_string(20), 
     random_date(date (current_date + interval '3 days'), date '2016-12-31'), 
     current_date 
from generate_series (1, 100) n;