Je peux insérer plusieurs lignes dans un tableau avec des valeurs par défaut pour toutes les colonnes de la manière RBAR :
create table course(course_id serial primary key);
do $$
begin
for i in 1..100000 loop
insert into course default values;
end loop;
end;$$;
Existe-t-il un moyen de faire de même avec une seule instruction SQL?
postgresql
default-value
postgresql-9.4
Jack dit d'essayer topanswers.xyz
la source
la source
Réponses:
Utilisation de
generate_series()
et ctes. Testé sur rextester.com :Pour le cas où il n'y a qu'une seule colonne et c'est un
serial
, je ne vois aucun moyen d'utiliser ledefault
. L'utilisation de generate_series est simple:clock_timestamp()
, l'instruction devra être ajustée en conséquence, comme le cas de la série.la source
i
est définie en premier, alors vous pouvez vous débrouiller quelque peu avec une version plus simple comme celleINSERT INTO t SELECT * FROM generate_series(1, 10)
qui attribue essentiellement à la première colonne et donne des valeurs par défaut à tout le reste, bien que je ne pouvait pas trouver d'autres moyens faciles. Si ce n'est qu'une seule option, vous pouvez également le faire avec la clé primaire en premier, par exemple en générant une série de valeurs que vous "ne réutiliserez probablement jamais" ex:INSERT INTO t SELECT * FROM generate_series(1000000, 1000000+10)
puis en changeant les nombres manuellement après cela.t
. N'ai-je pas utilisé SQL Fiddle correctement?select * from t
après l'instruction CTE.