2017-08-07 23 views
0

ich eine Tabelle in db haben:PostgreSQL Schleife mit zufälligen Einsätzen

CREATE TABLE operation (<br> 
    id  integer NOT NULL DEFAULT NEXTVAL ('seq_operation'),(<br> 
    phone_number  varchar(30),(<br> 
    age  integer,(<br> 
    gender  char(1),(<br> 
    isActive  boolean,(<br> 
    date_of_surgery  timestamp,(<br> 
); 

I 10000 Zeilen mit zufälligen Daten einfügen müssen. Wie kann ich eine solche INSERT-Anweisung machen? Ich bin frisch mit diesem Zeug und versuche, es mit anderen Antworten für ähnliche Fragen hier herauszufinden, aber kann nicht leicht verständlich für mich.

Ich würde Ihre Hilfe wirklich schätzen.

Mit freundlichen Grüßen, Max

+0

viele Möglichkeiten, es zu tun. Schleife für 10000, in der Schleife ein Dummy-Objekt (Operation) mit Daten dann Einzel-Einfügen mit JDBC. Das ist es. Oder machen Sie 10000 Objekte und loopen Sie diese, um sie einzufügen! – Zico

+0

Verwenden Sie einige mock dite Websites wie: https://www.mockaroo.com/ –

Antwort

1

ich in der Regel so etwas wie diese verwenden ist psql:

INSERT INTO table (values, to, fill) 
SELECT random(), random(), random() from generate_series(1,10000); 

In Ihrem Fall das sein wird:

INSERT INTO operation ( 
    phone_number, 
    age, 
    gender, 
    isActive, 
    date_of_surgery 
) SELECT 
    'some-phone-' || round(random()*1000), -- for text 
    round(random()*70), -- for integer 
    (ARRAY['f','m'])[round(random())+1], -- for char/enum 
    (ARRAY[false,true])[round(random())+1], -- for boolean 
    now() + round(random()*1000) * '1 second'::interval -- for timestamps 
FROM generate_series(1,10000); 

Ein bisschen mehr Erklärung.

  • generate_series erhalten Sie die Schleife bieten, können Sie auch die Werte zugreifen es generiert. Diese werden jetzt nicht benötigt.

  • 'text' || round(random()*1000) können 'Text-1212'-wie einzigartige Strings erzeugen.

  • round(random()*70) - Sie müssen abzurunden, da random() gibt einen floting Punktwert zwischen 0 und 1.

  • (ARRAY['f','m'])[round(random())+1] - für ENUM und gleichermaßen, bauen eine Array und erzeugen für eine Zufallsindex

  • now() + round(random()*1000) * '1 second'::interval - erhalten Sie eine Basislinie Datum und fügen Sie zufällige Zeit intervals.

(fiddle)

+0

Danke Mann, du bist der Beste! Noch zwei Fragen, wenn es Ihnen nichts ausmacht, von Ihrer Anfrage bekomme ich das Datumsformat wie: 2017-08-07T12: 30: 37.400894Z, was, wenn ich nur will: 2017-08-07T12: 30: 37? Und Sie sagten, ich kann auf die Werte zugreifen, die generate_series erzeugt. Wie kann ich es tun? –

+0

Sie können 'date_trunc' verwenden, um einen Zeitstempel auf eine bestimmte Genauigkeit abzuschneiden. Wenn Sie einen Alias ​​für generate_series zuweisen, können Sie diesen in Ihrer SELECT-Liste verwenden. Zum Beispiel 'SELECT a FROM generate_series (1,10) AS ein;' –

+0

Danke! Alles klar jetzt. –

Verwandte Themen