web-dev-qa-db-fra.com

Table SQL Populate avec des données aléatoires

J'ai une table avec deux champs:

  1. id (UUID) qui est la clé primaire et
  2. la description (var255)

Je veux insérer des données aléatoires avec une phrase SQL. J'aimerais que cette description soit quelque chose de aléatoire.

PS: j'utilise PostgreSQL.

47
no9

Je ne sais pas exactement si cela correspond à l'exigence d'une "description aléatoire", et ce n'est pas clair si vous voulez générer les données complètes: mais, par exemple, cela génère 10 enregistrements avec des identifiants consécutifs et des textes aléatoires:

  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)
65
leonbloy

Ce qui suit a fonctionné pour moi:

create table t_random as select s, md5(random()::text) from generate_Series(1,5) s;
24
Maksim Dmitriev

Ici, c'est une manière plus élégante d'utiliser les dernières fonctionnalités. Je vais utiliser le dictionnaire Unix (/ usr/share/dict/words) et le copier dans mes données PostgreSQL:

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

Ensuite, vous pouvez facilement créer une tonne de description sans sens MAIS consultable à l'aide de mots du dictionnaire avec les étapes suivantes:

1) Créez une table et une fonction. getNArrayS obtient tous les éléments d'un tableau et le nombre de fois qu'il doit concaténer.

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;

Une fois que vous avez tout en place, exécutez l'insertion à l'aide de 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);

Et maintenant, sélectionnez comme d'habitude:

postgres=# select * from randomtable limit 3;
 id |                 description                 
----+---------------------------------------------
  1 | ultracentenarian splenodiagnosis manurially
  2 | insequent monopolarity funipendulous
  3 | ruminate geodic unconcludable
(3 rows)
14
3manuek

Je suppose que la déclaration sentance ==? Vous pouvez utiliser Perl ou plperl car Perl a de bons générateurs de données aléatoires. Consultez le module Perl CPAN Data :: Random pour commencer.

Voici un exemple de script Perl pour générer des éléments aléatoires différents tirés de 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);
1
Kuberchaun