Puedo insertar varias filas en una tabla con valores predeterminados para todas las columnas de la manera 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;$$;
¿Hay alguna manera de hacer lo mismo con una sola instrucción SQL?
postgresql
default-value
postgresql-9.4
Jack dice que intente topanswers.xyz
fuente
fuente
Respuestas:
Utilizando
generate_series()
y ctes. Probado en rextester.com :Para el caso cuando solo hay una columna y es una
serial
, no veo forma de usar eldefault
. El uso de generate_series es sencillo:clock_timestamp()
, la declaración deberá ajustarse en consecuencia, como el caso en serie.fuente
i
se define primero, entonces puede obtener una versión más simple como laINSERT INTO t SELECT * FROM generate_series(1, 10)
que básicamente se asigna a la primera columna y proporciona valores predeterminados a todo el resto, aunque yo No podría encontrar otras formas fáciles. Si es solo una vez, también podría hacerlo primero con la clave primaria, por ejemplo, al generar una serie de valores que "probablemente nunca reutilizará", por ejemplo:INSERT INTO t SELECT * FROM generate_series(1000000, 1000000+10)
luego, cambie los números manualmente después de eso.t
. ¿No utilicé SQL Fiddle correctamente?select * from t
después de la declaración CTE.