1. По крону сносить не нужные записи, а в запросе пока не снеслись юзать лимит /n;
2. Через триггер который при каждом добавлении записи будет сносить не нужные;
3. Делать не insert а update где в качестве id записи выбирать подзапросом самую старую запись.
update event, (select id from event order by date limit 1) as s set value = 'changed', date = now() where t.id = s.id;
но предварительно придется нагнать туда 10 записей.
4. Сделать тоже самое через insert on conflict update. Тогда не придется нагонять
Но как то задача странная. На каждое внесение записи - делать еще процедуру удаления. Дополнительная нагрузка для чего?