Ich kann auf RBAR- Weise mehrere Zeilen mit Standardwerten für alle Spalten in eine Tabelle einfügen :
create table course(course_id serial primary key);
do $$
begin
for i in 1..100000 loop
insert into course default values;
end loop;
end;$$;
Gibt es eine Möglichkeit, dasselbe mit einer einzelnen SQL-Anweisung zu tun?
postgresql
default-value
postgresql-9.4
Jack Douglas
quelle
quelle
Antworten:
Mit
generate_series()
und ctes. Getestet in rextester.com :Für den Fall, dass es nur eine Spalte gibt und es sich um eine handelt
serial
, sehe ich keine Möglichkeit, die zu verwendendefault
. Die Verwendung der generate_series ist einfach:clock_timestamp()
, muss die Anweisung entsprechend angepasst werden, wie im seriellen Fall.quelle
i
können Sie mit einer einfacheren Version wie der,INSERT INTO t SELECT * FROM generate_series(1, 10)
die im Grunde der ersten Spalte zugewiesen ist und allen anderen die Standardeinstellungen gibt, etwas auskommen , obwohl ich Ich konnte keine anderen einfachen Wege finden. Wenn es nur ein Einzelfall ist, können Sie dies auch zuerst mit dem Primärschlüssel tun, indem Sie beispielsweise eine Reihe von Werten generieren, die Sie "wahrscheinlich nie wiederverwenden", z. B. undINSERT INTO t SELECT * FROM generate_series(1000000, 1000000+10)
anschließend manuell ändern.t
. Habe ich SQL Fiddle nicht richtig benutzt?select * from t
nach der CTE-Anweisung ausführen .