Jac*_*las 16 postgresql default-value postgresql-9.4
我可以通过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;$$;
Run Code Online (Sandbox Code Playgroud)
有没有办法用单个 SQL 语句做同样的事情?
Jas*_*sen 11
没有规定 select 语句必须返回一列或多列。
如果选择在多行中返回零列,您将插入带有所有默认值的行。
INSERT INTO table_name
SELECT FROM generate_series(1,10);
Run Code Online (Sandbox Code Playgroud)
使用generate_series()
和 ctes。在reextester.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
Run Code Online (Sandbox Code Playgroud)
对于只有一列并且它是 a 的情况serial
,我认为无法使用default
. 使用 generate_series 很简单:
insert into course
(course_id)
select
nextval('course_course_id_seq')
from
generate_series(1, 10);
Run Code Online (Sandbox Code Playgroud)
clock_timestamp()
,则必须相应地调整语句,例如串行情况。 归档时间: |
|
查看次数: |
15800 次 |
最近记录: |