すべての列のデフォルト値を持つテーブルに複数の行を挿入できます [〜#〜] 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;$$;
単一のSQLステートメントで同じことをする方法はありますか?
generate_series()
とctesを使用します。 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
_
列が1つしかなく、それがserial
である場合、default
を使用する方法がわかりません。 generate_seriesの使用は簡単です:
_insert into course
(course_id)
select
nextval('course_course_id_seq')
from
generate_series(1, 10);
_
clock_timestamp()
など、他のより「特有の」デフォルト値がある場合は、シリアルケースのように、ステートメントをそれに応じて調整する必要があります。