1. Удалить старые записи
2. Посчитать сколько удалили по каждому юзеру
3. Обновить counter'ы
Всё в один запрос.
PHP:
WITH deleted_posts AS (
DELETE FROM posts
WHERE created < now() - '6 months'::INTERVAL
RETURNING *
), deleted_per_user as (
SELECT user_id, count(*)
FROM deleted_posts
GROUP BY 1
)
UPDATE counts
SET posts_count = posts_count - d.count
FROM deleted_per_user d
WHERE d.user_id = counts.user_id;
Работает намного шустрее, чем делать то же самое в три отдельных запроса и гонять данные в приложение.