web-dev-qa-db-ja.com

すべての列のデフォルト値を使用して、テーブルに複数の行を挿入する方法はありますか?

すべての列のデフォルト値を持つテーブルに複数の行を挿入できます [〜#〜] 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);
_

  • UUID関数や非標準のclock_timestamp()など、他のより「特有の」デフォルト値がある場合は、シリアルケースのように、ステートメントをそれに応じて調整する必要があります。
8
ypercubeᵀᴹ