我可以使用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 语句做同样的事情?
我可以使用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中测试:对于只有一列并且是 a 的情况
serial
,我认为没有办法使用default
. 使用 generate_series 很简单:clock_timestamp()
,则必须相应地调整语句,例如串行情况。一个改进的想法来自类似的问题:使用语句中的选项将虚拟数据插入具有主键整数字段 GENERATED ALWAYS AS IDENTITY 的空表中。这仅在 10+ 版本中可用,在 9.6 及更早版本中不可用。 注意:如果表格只有一列,则它不起作用。
OVERRIDING USER VALUE
INSERT
serial
在dbfiddle.uk中测试:
没有规定 select 语句必须返回一列或多列。
如果选择在几行中返回零列,您将插入所有默认值的行。