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?
Utilisation de generate_series()
et ctes. Testé dans rextester.com :
create table t
( tid serial primary key,
i int default 0,
name text default 'Jack'
) ;
with ins as
(insert into t (i, name) -- all the columns except any serial
values (default, default)
returning i, name
)
insert into t
(i, name)
select
ins.i, ins.name
from
ins cross join generate_series(1, 9); -- one less than you need
Pour le cas où il n'y a qu'une seule colonne et qu'il s'agit d'un serial
, je ne vois aucun moyen d'utiliser le default
. L'utilisation de generate_series est simple:
insert into course
(course_id)
select
nextval('course_course_id_seq')
from
generate_series(1, 10);
clock_timestamp()
non standard, l'instruction devra être ajustée en conséquence, comme le cas de la série.