আপনি আপনার পছন্দসই সারি নম্বর বজায় রাখতে একটি ট্রিগার সংজ্ঞায়িত করতে পারেন:
CREATE OR REPLACE FUNCTION trf_keep_row_number_steady()
RETURNS TRIGGER AS
$body$
BEGIN
-- delete only where are too many rows
IF (SELECT count(id) FROM log_table) > rownum_limit
THEN
-- I assume here that id is an auto-incremented value in log_table
DELETE FROM log_table
WHERE id = (SELECT min(id) FROM log_table);
END IF;
END;
$body$
LANGUAGE plpgsql;
CREATE TRIGGER tr_keep_row_number_steady
AFTER INSERT ON log_table
FOR EACH ROW EXECUTE PROCEDURE trf_keep_row_number_steady();
এটি সম্ভবত সেরা পারফর্মিং বিকল্প নয়, তবে একবার আপনি সীমাতে পৌঁছে গেলে, এটি কখনই ছাড়িয়ে যাবে না। যদি ওঠানামার জন্য জায়গা থাকে তবে আপনি পর্যায়ক্রমে সারি নম্বরটি পরীক্ষা করতে পারেন এবং শুরু থেকে অতিরিক্ত সারিগুলি মুছতে পারেন।
সম্পাদনা: পার্টিশন করার
চেয়ে আপনার যদি সত্যিই বড় লগ থাকে (মাসে এক মিলিয়ন বলুন)তবে সহজ সমাধান হতে পারে। তারপরে আপনি কেবল অপ্রয়োজনীয় টেবিলগুলি (যেখানে বলুনmax(timestamp) < CURRENT_DATE - 1 year) ফেলে দিতে পারেন। আপনি আপনার টাইমস্ট্যাম্প (বা উত্পন্ন তারিখ) ব্যাপ্তি বিভাজনের শর্ত হিসাবে ব্যবহার করতে পারেন।
তবে পুরানো লগগুলি বাতিল করার আগে সাবধান হন। আপনি কি এগুলি কখনই প্রয়োজন হবে না তা নিশ্চিত?