Bạn có thể xác định một kích hoạt để duy trì số hàng mong muốn của bạn:
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();
Đây có lẽ không phải là tùy chọn hoạt động tốt nhất, nhưng một khi bạn đạt đến giới hạn, nó sẽ không bao giờ vượt quá. Nếu có không gian cho biến động, thì bạn có thể kiểm tra số hàng theo định kỳ và xóa các hàng thừa từ đầu.
EDIT:
Nếu bạn có nhật ký thực sự lớn (giả sử một triệu mỗi tháng) thì phân vùng có thể là giải pháp dễ nhất. Sau đó, bạn có thể chỉ cần thả các bảng không cần thiết (nói ở đâumax(timestamp) < CURRENT_DATE - 1 year
). Bạn có thể sử dụng dấu thời gian của mình (hoặc ngày bắt nguồn) làm điều kiện để phân vùng phạm vi .
Nhưng hãy cẩn thận trước khi loại bỏ các bản ghi cũ. Bạn có chắc chắn bạn sẽ không bao giờ cần những thứ đó?