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?
postgresql
default-value
postgresql-9.4
Jack diz que tenta topanswers.xyz
fonte
fonte
Respostas:
Usando
generate_series()
e ctes. Testado em rextester.com :Para o caso em que há apenas uma coluna e é uma
serial
, não vejo como usar odefault
. O uso do generate_series é direto:clock_timestamp()
, a instrução deverá ser ajustada adequadamente, como o caso serial.fonte
i
for definida primeiro, você poderá se familiarizar com uma versão mais simples, como aINSERT INTO t SELECT * FROM generate_series(1, 10)
que basicamente atribui à primeira coluna e fornece padrões para todo o resto, embora eu não conseguia descobrir outras maneiras fáceis. Se é apenas uma opção, você também pode fazer isso com a chave primária primeiro, por exemplo, gerando uma série de valores que "provavelmente nunca reutilizará" ex:INSERT INTO t SELECT * FROM generate_series(1000000, 1000000+10)
alterando os números manualmente depois disso.t
. Eu não usei o SQL Fiddle corretamente?select * from t
após a instrução CTE.