Posso inserir várias linhas em uma tabela com valores padrão para todas as colunas da maneira 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;$$;
Existe uma maneira de fazer o mesmo com uma única instrução SQL?
Usando
generate_series()
e ctes. Testado em rextester.com :Para o caso em que há apenas uma coluna e é um
serial
, não vejo como usar odefault
. Usar o generate_series é direto:clock_timestamp()
, a declaração terá que ser ajustada de acordo, como o caso serial.Uma ideia para melhorar veio de uma pergunta semelhante: Inserir dados fictícios em uma tabela vazia com um campo inteiro de chave primária GENERATED ALWAYS AS IDENTITY , usando a
OVERRIDING USER VALUE
opção naINSERT
instrução. Isso está disponível apenas nas versões 10+, não na 9.6 e anteriores.Nota: NÃO funciona se a tabela tiver uma única coluna que seja
serial
.Testado em dbfiddle.uk :
Não há regra de que as instruções select devam retornar uma ou mais colunas.
Se o select retornar zero colunas em várias linhas, você obterá linhas inseridas com todos os valores padrão.