it-swarm.com.de

SQL Füllt die Tabelle mit zufälligen Daten

Ich habe eine Tabelle mit zwei Feldern:

  1. id (UUID) das ist Primärschlüssel und
  2. beschreibung (var255)

Ich möchte zufällige Daten mit SQL-Satz einfügen. Ich würde mir wünschen, dass diese Beschreibung etwas Zufälliges ist.

PS: Ich benutze PostgreSQL.

47
no9

Ich weiß nicht genau, ob dies der Anforderung für eine "zufällige Beschreibung" entspricht, und es ist nicht klar, ob Sie die vollständigen Daten generieren möchten. Dies generiert jedoch beispielsweise 10 Datensätze mit aufeinander folgenden IDs und zufälligen Texten:

  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

Folgendes hat für mich funktioniert:

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

Hier ist es eine elegantere Art, die neuesten Funktionen zu nutzen. Ich werde das Unix-Wörterbuch (/ usr/share/dict/words) verwenden und es in meine PostgreSQL-Daten kopieren:

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

Dann können Sie ganz einfach eine sinnlose Beschreibung erstellen, die jedoch mithilfe von Wörterbuchwörtern durchsucht werden kann. Führen Sie dazu die folgenden Schritte aus:

1) Erstellen Sie eine Tabelle und eine Funktion. getNArrayS ruft alle Elemente in einem Array ab und die Häufigkeit, mit der es verkettet werden muss.

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;

Sobald Sie alles an Ort und Stelle haben, führen Sie die Einfügung mit CTE aus:

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);

Und jetzt wie gewohnt auswählen:

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

Ich nehme an sentance == Aussage? Sie können Perl oder plperl verwenden, da Perl einige gute Zufallsdatengeneratoren hat. Schauen Sie sich zum Starten das Perl CPAN-Modul Data :: Random an.

Hier ist ein Beispiel eines Perl-Skripts, um verschiedene zufällige Elemente aus CPAN zu generieren.

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