কি সমস্যা:
ALTER TABLE foo ADD column bar bigserial;
স্বয়ংক্রিয়ভাবে অনন্য মান দিয়ে পূর্ণ হবে (1 দিয়ে শুরু)।
আপনি যদি প্রতিটি বিদ্যমান সারির জন্য একটি নম্বর চান তবে সারণির প্রতিটি সারি আপডেট করতে হবে । না না?
যদি ডেটা পৃষ্ঠাগুলিতে মৃত টিপলস বা বিনামূল্যে স্থান পুনরায় ব্যবহার করতে না পারে তবে টেবিলটি তার আকারের দ্বিগুণ হয়ে যাবে। FILLFACTOR
টেবিলের উপরে ছড়িয়ে থাকা 100 এরও কম বা এলোমেলো মৃত টিপলগুলি থেকে অপারেশনের পারফরম্যান্স অনেক উপকার করতে পারে । অন্যথায় আপনি VACUUM FULL ANALYZE
পরে চালাতে চান ডিস্কের স্থান পুনরুদ্ধার করতে। যদিও এটি দ্রুত হবে না।
pgstattuple
আপনি এই এক্সটেনশনে আগ্রহী হতে পারেন। এটি আপনাকে আপনার টেবিলগুলিতে পরিসংখ্যান সংগ্রহ করতে সহায়তা করে। মৃত টিপলস এবং বিনামূল্যে স্থান সম্পর্কে সন্ধান করতে:
প্রতি ডেটাবে একবার এক্সটেনশন ইনস্টল করুন:
CREATE EXTENSION pgstattuple;
কল করুন:
SELECT * FROM pgstattuple('tbl');
বিকল্প
যদি আপনি একটি নতুন টেবিল তৈরি করতে সক্ষম হন তবে এটি নির্ভর করে ভিউ, বিদেশী কীগুলি, ...
পুরানো টেবিলের একটি খালি অনুলিপি তৈরি করুন:
CREATE new_tbl AS
SELECT *
FROM old_tbl
LIMIT 0;
বিগসিরিয়াল কলাম যুক্ত করুন:
ALTER new_tbl ADD column bar bigserial;
পুরানো টেবিল থেকে তথ্য প্রবেশ করুন, স্বয়ংক্রিয়ভাবে বড়সিরিয়াল পূরণ করুন:
INSERT INTO new_tbl
SELECT * -- new column will be filled with default
FROM old_tbl
ORDER BY something; -- or don't order if you don't care: faster
নতুন বিগসিরিয়াল কলামটি INSERT এর SELECT এ অনুপস্থিত এবং এটি স্বয়ংক্রিয়ভাবে তার ডিফল্ট মান দিয়ে পূর্ণ হবে । আপনি সমস্ত কলামের বানান করতে পারেন এবং একই প্রভাব তালিকায় যুক্ত nextval()
করতে SELECT
পারেন।
আপনি নতুন টেবিলে আপনার সমস্ত ডেটা পেয়েছেন তা নিশ্চিত করুন।
পুরাতন সারণীতে এখন সূচি, সীমাবদ্ধতা, ট্রিগার যুক্ত করুন ।
DROP TABLE old_tbl;
ALTER TABLE new_tbl RENAME TO old_tbl;
সামগ্রিকভাবে বেশ কিছুটা দ্রুত হতে পারে। এটি আপনাকে কোনও ভোঁতা ছাড়াই ভ্যানিলা টেবিল (এবং সূচি) সহ ছেড়ে দেয়।
উইগল রুম হিসাবে আপনার টেবিলের রাজ্যের উপর নির্ভর করে পুরানো টেবিলের আকারের চারপাশে - বিনামূল্যে ডিস্কের স্থান দরকার। টেবিল ফুলে যাওয়ার কারণে আপনার প্রথম সহজ পদ্ধতির সাথে ঠিক তেমন প্রয়োজন হতে পারে। আবার, বিশদগুলি আপনার টেবিলের অবস্থার উপর নির্ভর করে।
fsync
গুলি