দ্রষ্টব্য: আমি এটি 9.1 তে পরীক্ষা করেছি। আমার কাছে এখানে 9.0 সার্ভার নেই। আমি প্রীতিতেট্টি নিশ্চিত যদিও এটি 9.0 তে কাজ করবে।
সতর্কতা (@ আর্নির মন্তব্যে যেমন উল্লেখ করা হয়েছে):
Note that high CPU load due to I/O operations may be expected.
আপনি কোনও অস্থায়ী টেবিল স্পেস ব্যবহার করে ডাউন-টাইম বেশ কিছুটা না করে এটি করতে পারেন। ডাউন-টাইম একচেটিয়া লক আকারে হবে। তবে কেবল টেবিলে আপনি শূন্য হয়ে যাচ্ছেন। সুতরাং যা ঘটবে তা হ'ল ক্লায়েন্টের অনুসন্ধানগুলি কেবলমাত্র প্রশ্নটিতে সারণীতে অ্যাক্সেস করলে লকটি অর্জন করার জন্য অপেক্ষা করবে । আপনার বিদ্যমান সংযোগগুলি বন্ধ করার দরকার নেই।
তবে সচেতন হওয়ার জন্য একটি বিষয় হ'ল, টেবিলটি সরিয়ে ফেলতে এবং ভ্যাকুয়াম পূর্ণ পূর্ণ করার জন্য প্রথমে তাদের প্রথমে একটি এক্সক্লুসিভ লকের জন্য অপেক্ষা করতে হবে!
প্রথমত, আপনাকে অবশ্যই কিছু অতিরিক্ত সঞ্চয় প্রয়োজন। Stéphane
মন্তব্যে যেমন উল্লেখ করা হয়েছে, এটি VACUUM FULL
সম্পূর্ণ অনুলিপি হিসাবে প্রশ্নের টেবিলের চেয়ে কমপক্ষে দ্বিগুণ হওয়া দরকার। আপনি ভাগ্যবান এবং মেশিনে গতিশীলভাবে একটি ডিস্ক যোগ করতে পারেন, এটি করুন। সবচেয়ে খারাপ ক্ষেত্রে আপনি কেবল একটি ইউএসবি ডিস্ক সংযুক্ত করতে পারেন (ঝুঁকিপূর্ণ এবং যদিও ধীর)!
এর পরে, নতুন ডিভাইসটি মাউন্ট করুন এবং এটি টেবিলস্পেস হিসাবে উপলব্ধ করুন:
CREATE TABLESPACE tempspace LOCATION '/path/to/new/folder';
আপনি টেবিল স্পেসগুলি সহজেই ব্যবহার করে তালিকাভুক্ত করতে পারেন:
\db
আপনার টেবিলের বর্তমান টেবিল স্পেসটি পুনরায় পরীক্ষা করুন (এটি কোথায় ফিরে যেতে হবে তা আপনার জানতে হবে):
SELECT tablespace FROM pg_tables WHERE tablename = 'mytable';
যদি এটি হয় তবে এটি NULL
ডিফল্ট টেবিল স্পেসে থাকবে:
SHOW default_tablespace;
তাহলে যে হয় NULL
পাশাপাশি এটি সম্ভবত হতে হবে pg_default
(চেক সরকারী দস্তাবেজ ক্ষেত্রে এটি পরিবর্তন হয়েছে)।
এখন টেবিলটি সরান:
ALTER TABLE mytable SET TABLESPACE tempspace;
COMMIT; -- if autocommit is off
এটি ভ্যাকুয়াম:
VACUUM FULL mytable;
এটি আবার সরান:
-- assuming you are using the defaults, the tablespace will be "pg_default".
-- Otherwise use the value from the SELECT we did earlier.
ALTER TABLE mytable SET TABLESPACE pg_default;
COMMIT; -- if autocommit is off
অস্থায়ী স্থান সরান:
DROP TABLESPACE tempspace;