সমস্ত কলামের জন্য ডিফল্ট মান সহ কোনও সারণিকে একাধিক সারি সন্নিবেশ করার কোনও উপায় আছে কি?


14

আমি সমস্ত কলামের আরবিআর পদ্ধতিতে ডিফল্ট মান সহ একটি সারণীতে একাধিক সারি সন্নিবেশ করতে পারি :

create table course(course_id serial primary key);

do $$
begin
  for i in 1..100000 loop
    insert into course default values;
  end loop;
end;$$;

একটি একক এসকিউএল স্টেটমেন্ট দিয়ে একই করার কোনও উপায় আছে কি?


এসও-তে একটি ঘনিষ্ঠভাবে সম্পর্কিত প্রশ্নের ব্যাপক উত্তর: stackoverflow.com/questions/23794405/…
এরউইন ব্র্যান্ডসেটেটার

উত্তর:


8

ব্যবহার generate_series()এবং ctes। Rextester.com এ পরীক্ষিত :

create table t
( tid serial primary key,
  i int default 0,
  name text default 'Jack'
) ;


with ins as
  (insert into t (i, name)               -- all the columns except any serial
   values (default, default)
   returning i, name
  )
insert into t 
  (i, name)
select 
  ins.i, ins.name
from 
  ins cross join generate_series(1, 9);  -- one less than you need

ক্ষেত্রে যখন কেবল একটি কলাম থাকে এবং এটি একটি serial, আমি এটি ব্যবহার করার কোনও উপায় দেখতে পাচ্ছি না default। জেনারেট_সরিজ ব্যবহার সোজা-এগিয়ে রয়েছে:

insert into course
  (course_id)
select
  nextval('course_course_id_seq')
from
  generate_series(1, 10);

  • যদি অন্য, আরও "অদ্ভুত" ডিফল্ট মান থাকে তবে কোনও ইউআইডি ফাংশন বা অ-মানক হিসাবে clock_timestamp(), বিবৃতিটি সিরিয়াল কেসের মতো, সেই অনুযায়ী সামঞ্জস্য করতে হবে।

প্রাথমিক কীটি যদি "প্রথম নয়" কলামটি সংজ্ঞায়িত হয়, উদাহরণস্বরূপ, যদি iএটি প্রথম সংজ্ঞায়িত করা হয় তবে আপনি কিছুটা সরল সংস্করণ সহ পেতে পারেন INSERT INTO t SELECT * FROM generate_series(1, 10)যা মূলত প্রথম কলামে নির্ধারিত হয় এবং বাকী সমস্তটিকে ডিফল্ট দেয় যদিও আমি অন্য কোনও সহজ উপায় বের করতে পারিনি। যদি এটি কেবলমাত্র এক বন্ধ থাকে তবে আপনি এটি প্রাথমিক কী দ্বারা প্রথমে করতেও পারেন, উদাহরণস্বরূপ একাধিক মান তৈরি করে আপনি সম্ভবত "পুনরায় ব্যবহার করতে পারবেন না" প্রাক্তন: INSERT INTO t SELECT * FROM generate_series(1000000, 1000000+10)তারপরে ম্যানুয়ালি নম্বর পরিবর্তন করে।
রজারডপ্যাক

আমি যখন এটি এসকিউএল ফিডলে চালিয়েছি, প্রথম ক্যোয়ারিতে কোনও সারি সারণিতে সন্নিবেশ করা হয়নি t। আমি কি এসকিউএল ফিডল সঠিকভাবে ব্যবহার করিনি?
ডেরেক মাহর

আমি বুঝতে পারি যে আমি কী ভুল করেছি। এসকিউএল ফিডল প্রতিটি সম্পাদনকে লেনদেনের মতো আচরণ করে যা সম্পন্ন হলে এটি পিছন ফিরে আসে। ফলস্বরূপ, টেবিলের সারিগুলি দেখতে, আমাকে select * from tসিটিই বিবৃতি দেওয়ার পরে কার্যকর করতে হয়েছিল ।
ডেরেক মাহর

নাহ, এটিও কাজ করে না।
ডেরেক মাহর

1
@ ডেরেকমাহার এসকিউএলফিডাল অবশ্যই ভাঙ্গতে হবে। আমি আমার উত্তরটিতে লিঙ্কটি সম্পাদনা করেছি rextester.com এ।
ypercubeᵀᴹ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.