Postgresql
有沒有辦法將多行插入到所有列的預設值的表中?
我可以使用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()
,則必須相應地調整語句,例如串列情況。