Mogę wstawić wiele wierszy do tabeli z wartościami domyślnymi dla wszystkich kolumn w sposób 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;$$;
Czy istnieje sposób, aby zrobić to samo z pojedynczą instrukcją SQL?
postgresql
default-value
postgresql-9.4
Jack mówi, że spróbuj topanswers.xyz
źródło
źródło
Odpowiedzi:
Używanie
generate_series()
i ctes. Testowane w rextester.com :W przypadku, gdy jest tylko jedna kolumna i jest to
serial
, nie widzę sposobu na użyciedefault
. Korzystanie z generator_series jest proste:clock_timestamp()
, instrukcja będzie musiała zostać odpowiednio dostosowana, podobnie jak przypadek szeregowy.źródło
i
jest zdefiniowana jako pierwsza, możesz w pewnym stopniu poradzić sobie z prostszą wersją, taką jak,INSERT INTO t SELECT * FROM generate_series(1, 10)
która zasadniczo przypisuje pierwszą kolumnę i daje wartości domyślne dla całej reszty, chociaż ja nie mogłem wymyślić żadnych innych łatwych sposobów. Jeśli jest to jednorazowo, możesz to zrobić najpierw za pomocą klucza podstawowego, na przykład generując serię wartości, których „prawdopodobnie nigdy nie użyjesz ponownie”,INSERT INTO t SELECT * FROM generate_series(1000000, 1000000+10)
a następnie ręcznie zmieniając liczby.t
. Czy nie używałem poprawnie SQL Fiddle?select * from t
po instrukcji CTE.