নতুন টেবিল তৈরি করার পরিবর্তে, আপনি কাটা কাটার পরে একই টেবিলটিতে অনন্য সারিগুলি পুনরায় সন্নিবেশ করতে পারেন। এটা সব কি এক লেনদেন । Allyচ্ছিকভাবে, আপনি লেনদেন শেষে অস্থায়ী টেবিলটি স্বয়ংক্রিয়ভাবে দিয়ে ফেলতে পারেন ON COMMIT DROP
। নিচে দেখ.
এই পদ্ধতিটি কেবল তখনই কার্যকর যখন সমস্ত টেবিলের উপর থেকে মুছে ফেলার জন্য প্রচুর সারি রয়েছে। মাত্র কয়েকটি অনুলিপি জন্য, একটি সমতল ব্যবহার করুন DELETE
।
আপনি লক্ষ লক্ষ সারি উল্লেখ করেছেন। অপারেশনটি দ্রুত করতে আপনি সেশনের জন্য পর্যাপ্ত অস্থায়ী বাফার বরাদ্দ করতে চান । আপনার বর্তমান সেশনে কোনও টেম্প বাফার ব্যবহারের আগে সেটিংসটি সামঞ্জস্য করতে হবে । আপনার টেবিলের আকারটি সন্ধান করুন:
SELECT pg_size_pretty(pg_relation_size('tbl'));
সে temp_buffers
অনুযায়ী সেট করুন । উদারভাবে গোল হয়ে উঠুন কারণ মেমরির প্রতিনিধির জন্য আরও কিছুটা র্যাম দরকার।
SET temp_buffers = 200MB;
BEGIN;
CREATE TEMPORARY TABLE t_tmp AS
SELECT DISTINCT * FROM tbl;
TRUNCATE tbl;
INSERT INTO tbl
SELECT * FROM t_tmp;
COMMIT;
এই পদ্ধতি একটি নতুন টেবিল তৈরি উচ্চতর হতে পারে যদি নির্ভর করে বস্তুর বিদ্যমান। সারণী উল্লেখ করে দেখুন, সূচি, বিদেশী কী বা অন্যান্য অবজেক্ট। TRUNCATE
আপনাকে যে কোনও উপায়ে ক্লিন স্লেট দিয়ে শুরু করতে দেয় (পটভূমিতে নতুন ফাইল) এবং বড় টেবিলের চেয়ে অনেক দ্রুত DELETE FROM tbl
( DELETE
আসলে ছোট টেবিলগুলির সাথে দ্রুত হতে পারে)।
বড় টেবিলগুলির জন্য, সূচী এবং বিদেশী কীগুলি ড্রপ করা, টেবিলটি পুনরায় পূরণ করতে এবং এই বিষয়গুলি পুনরায় তৈরি করা নিয়মিতভাবে দ্রুত হয়। যতদূর fk সীমাবদ্ধতা সম্পর্কিত, আপনার অবশ্যই নিশ্চিত হওয়া উচিত যে নতুন ডেটা অবশ্যই বৈধ বা আপনি এফকে তৈরির চেষ্টা করার ক্ষেত্রে ব্যতিক্রম হিসাবে চলে যাবেন।
নোট TRUNCATE
যেটির চেয়ে বেশি আক্রমণাত্মক লকিংয়ের প্রয়োজন DELETE
। ভারী, একযোগে বোঝা সহ টেবিলগুলির জন্য এটি একটি সমস্যা হতে পারে।
যদি TRUNCATE
কোনও বিকল্প না হয় বা সাধারণত ছোট থেকে মাঝারি টেবিলের জন্য একটি ডেটা-সংশোধনকারী সিটিই (পোস্টগ্রিস 9.1 +) সহ একই কৌশল থাকে :
WITH del AS (DELETE FROM tbl RETURNING *)
INSERT INTO tbl
SELECT DISTINCT * FROM del;
বড় টেবিলগুলির জন্য ধীরে ধীরে, কারণ TRUNCATE
সেখানে দ্রুত। ছোট টেবিলগুলির জন্য দ্রুত (এবং সহজ!) হতে পারে।
আপনার যদি কোনও নির্ভরযোগ্য অবজেক্ট না থাকে তবে আপনি একটি নতুন টেবিল তৈরি করতে পারেন এবং পুরাতনটিকে মুছতে পারেন, তবে আপনি এই সার্বজনীন পদ্ধতির মাধ্যমে খুব কমই কিছু অর্জন করতে পারেন।
খুব বড় টেবিলগুলির জন্য যা উপলব্ধ র্যামের সাথে খাপ খায় না , একটি নতুন টেবিল তৈরি করা যথেষ্ট দ্রুত হবে। নির্ভরশীল অবজেক্টের সাথে আপনাকে সম্ভাব্য সমস্যা / ওভারহেডের বিরুদ্ধে এটিকে বিবেচনা করতে হবে।