İstediğiniz satır numarasını korumak için bir tetikleyici tanımlayabilirsiniz:
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();
Bu muhtemelen en iyi performans gösteren seçenek değildir, ancak sınıra ulaştığınızda hiçbir zaman aşılmayacaktır. Dalgalanma için boşluk varsa, satır numarasını periyodik olarak kontrol edebilir ve fazla satırları baştan silebilirsiniz.
EDIT:
Eğer gerçekten büyük günlükleri (ayda bir milyon diyelim) bölümleme daha kolay bir çözüm olabilir. Daha sonra gereksiz tabloları bırakabilirsiniz (nerede olduğunu söyleyinmax(timestamp) < CURRENT_DATE - 1 year). Aralık etiketlemenin koşulu olarak zaman damganızı (veya türetilmiş bir tarihi) kullanabilirsiniz.
Ancak eski günlükleri atmadan önce dikkatli olun. Bunlara asla ihtiyacınız olmayacağından emin misiniz?