Saya bisa menyisipkan banyak baris ke tabel dengan nilai default untuk semua kolom dengan cara 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;$$;
Apakah ada cara untuk melakukan hal yang sama dengan pernyataan SQL tunggal?
postgresql
default-value
postgresql-9.4
Jack mengatakan coba topanswers.xyz
sumber
sumber
Jawaban:
Menggunakan
generate_series()
dan ctes. Diuji di rextester.com :Untuk kasus ketika hanya ada satu kolom dan itu adalah
serial
, saya tidak melihat cara untuk menggunakandefault
. Menggunakan generate_series sangat mudah:clock_timestamp()
, pernyataan tersebut harus disesuaikan, seperti kasus seri.sumber
i
didefinisikan pertama, maka Anda dapat bertahan dengan versi yang lebih sederhana sepertiINSERT INTO t SELECT * FROM generate_series(1, 10)
yang pada dasarnya menetapkan ke kolom pertama dan memberikan standar untuk semua yang lain, meskipun saya tidak bisa menemukan cara mudah lainnya. Jika hanya satu kali saja maka Anda juga bisa melakukannya dengan kunci primer terlebih dahulu, misalnya dengan menghasilkan serangkaian nilai yang Anda "mungkin tidak akan menggunakan kembali" ex:INSERT INTO t SELECT * FROM generate_series(1000000, 1000000+10)
kemudian mengubah angka secara manual setelah itu.t
. Apakah saya tidak menggunakan SQL Fiddle dengan benar?select * from t
setelah pernyataan CTE.