Postgresql

有沒有辦法將多行插入到所有列的預設值的表中?

  • February 18, 2017

我可以使用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

對於只有一列並且是 a 的情況serial,我認為沒有辦法使用default. 使用 generate_series 很簡單:

insert into course
 (course_id)
select
 nextval('course_course_id_seq')
from
 generate_series(1, 10);

  • 如果還有其他更“特殊”的預設值,例如 UUID 函式或 non-standard clock_timestamp(),則必須相應地調整語句,例如串列情況。

引用自:https://dba.stackexchange.com/questions/89538