SQL Populate table with random data

前端 未结 4 1441
无人及你
无人及你 2020-12-01 05:20

I have a table with two fields:

  1. id(UUID) that is primary Key and
  2. description (var255)

I want to insert random data with SQ

相关标签:
4条回答
  • 2020-12-01 05:30

    I assume sentance == statement? You could use perl or plperl as perl has some good random data generators. Check out perl CPAN module Data::Random to start.

    Here's a sample of a perl script to generate some different random stuff taken from CPAN.

    use Data::Random qw(:all);
    
      my @random_words = rand_words( size => 10 );
    
      my @random_chars = rand_chars( set => 'all', min => 5, max => 8 );
    
      my @random_set = rand_set( set => \@set, size => 5 );
    
      my $random_enum = rand_enum( set => \@set );
    
      my $random_date = rand_date();
    
      my $random_time = rand_time();
    
      my $random_datetime = rand_datetime();
    
      open(FILE, ">rand_image.png") or die $!;
      binmode(FILE);
      print FILE rand_image( bgcolor => [0, 0, 0] );
      close(FILE);
    
    0 讨论(0)
  • 2020-12-01 05:31

    Here it is a more elegant way using the latest features. I will use the Unix dictionary (/usr/share/dict/words) and copy it into my PostgreSQL data:

    cp /usr/share/dict/words data/pg95/words.list
    

    Then, you can easily create a ton of no sense description BUT searchable using dictionary words with the following steps:

    1) Create table and function. getNArrayS gets all the elements in an array and teh number of times it needs to concatenate.

    CREATE TABLE randomTable(id serial PRIMARY KEY, description text);
    
    CREATE OR REPLACE FUNCTION getNArrayS(el text[], count int) RETURNS text AS $$
      SELECT string_agg(el[random()*(array_length(el,1)-1)+1], ' ') FROM generate_series(1,count) g(i)
    $$
    VOLATILE
    LANGUAGE SQL;
    

    Once you have all in place, run the insert using CTE:

    WITH t(ray) AS(
      SELECT (string_to_array(pg_read_file('words.list')::text,E'\n')) 
    ) 
    INSERT INTO randomTable(description)
    SELECT getNArrayS(T.ray, 3) FROM T, generate_series(1,10000);
    

    And now, select as usual:

    postgres=# select * from randomtable limit 3;
     id |                 description                 
    ----+---------------------------------------------
      1 | ultracentenarian splenodiagnosis manurially
      2 | insequent monopolarity funipendulous
      3 | ruminate geodic unconcludable
    (3 rows)
    
    0 讨论(0)
  • 2020-12-01 05:46

    I dont know exactly if this fits the requirement for a "random description", and it's not clear if you want to generate the full data: but, for example, this generates 10 records with consecutive ids and random texts:

      test=#  SELECT generate_series(1,10) AS id, md5(random()::text) AS descr;
    
         id |               descr
        ----+----------------------------------
          1 | 65c141ee1fdeb269d2e393cb1d3e1c09
          2 | 269638b9061149e9228d1b2718cb035e
          3 | 020bce01ba6a6623702c4da1bc6d556e
          4 | 18fad4813efe3dcdb388d7d8c4b6d3b4
          5 | a7859b3bcf7ff11f921ceef58dc1e5b5
          6 | 63691d4a20f7f23843503349c32aa08c
          7 | ca317278d40f2f3ac81224f6996d1c57
          8 | bb4a284e1c53775a02ebd6ec91bbb847
          9 | b444b5ea7966cd76174a618ec0bb9901
         10 | 800495c53976f60641fb4d486be61dc6
        (10 rows)
    
    0 讨论(0)
  • 2020-12-01 05:47

    The following worked for me:

    create table t_random as select s, md5(random()::text) from generate_Series(1,5) s;
    
    0 讨论(0)
提交回复
热议问题