2010-07-30 8 views
28

ich eine Tabelle mit zwei Feldern haben:SQL Populate Tabelle mit Zufallsdaten

  1. id (UUID), die primaryKey und
  2. Beschreibung (var255)

I Zufallsdaten eingefügt werden soll mit sql sentance. Ich mag diese Beschreibung würde etwas zufällig.

Kann some1 bitte mir dabei helfen?

PS: im mit postgresql.

Antwort

50

ich nicht genau wissen, ob dies die Forderung nach einer „zufälligen Beschreibung“ paßt, und es ist nicht klar, ob Sie die vollständigen Daten generieren mögen aber zum Beispiel des erzeugt 10 Datensätze mit aufeinanderfolgenden IDs und zufälligen Texte:

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) 
+3

Warum 'nicht generate_series SELECT (1,10) AS id, md5 (zufälliger() :: Text) AS descr; '? –

+0

@AntonyHatchkins ohne guten Grund. Behoben nach Ihrem Vorschlag. Danke – leonbloy

1

Ich gehe davon aus sentance == Aussage? Sie könnten Perl oder Plperl verwenden, da Perl einige gute zufällige Datengeneratoren hat. Überprüfen Sie perl CPAN Modul Daten :: Random zu starten.

Hier ist ein Beispiel für ein Perl-Skript, um verschiedene zufällige Sachen aus CPAN zu erzeugen.

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

Es funktioniert für mich. Gefunden here.

create table t_random as select s, md5(random()::text) from generate_Series(1,5) s; 
+0

Es ist nützlich zu wissen, wie man die Zeitreihe im from-Teil der Abfrage macht. Danke für das Follow-up. –

5

Hier ist es ein eleganter Weg, um die neuesten Funktionen verwenden. Ich werde das Unix-Lexikon nutzen (/ usr/share/dict/words) und kopieren Sie sie in meine PostgreSQL Daten:

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

Dann können Sie leicht eine Tonne ohne Sinn Beschreibung erstellen BUT durchsuchbar mit Wörterbuch Wörter mit der folgende Schritte:

1) Tabelle und Funktion erstellen. GetNArrayS ruft alle Elemente in einem Array und die Anzahl der Verkettungen ab.

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 seinem Platz haben, führen Sie den Einsatz mit 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); 

Und jetzt, wählen Sie wie gewohnt:

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