main pico / scripts / reap.sql
Eric Bower  ·  2026-05-03
 1-- find unused accounts
 2SELECT count(*) FROM app_users u WHERE NOT EXISTS (SELECT 1 FROM posts WHERE user_id = u.id) AND NOT EXISTS (SELECT 1 FROM projects WHERE user_id = u.id) AND NOT EXISTS (SELECT 1 FROM access_logs WHERE user_id = u.id AND created_at > NOW() - INTERVAL '1 year') AND NOT EXISTS (SELECT 1 FROM feature_flags ff WHERE ff.user_id = u.id) AND NOT EXISTS (SELECT 1 FROM payment_history ph WHERE ph.user_id = u.id);
 3-- delete unused accounts
 4DELETE FROM app_users u WHERE NOT EXISTS (SELECT 1 FROM posts WHERE user_id = u.id) AND NOT EXISTS (SELECT 1 FROM projects WHERE user_id = u.id) AND NOT EXISTS (SELECT 1 FROM access_logs WHERE user_id = u.id AND created_at > NOW() - INTERVAL '1 year') AND NOT EXISTS (SELECT 1 FROM feature_flags ff WHERE ff.user_id = u.id) AND NOT EXISTS (SELECT 1 FROM payment_history ph WHERE ph.user_id = u.id);
 5
 6-- how many visits will be deleted
 7SELECT count(*) FROM analytics_visits WHERE created_at < NOW() - INTERVAL '1 year';
 8-- delete old analytic visits
 9DELETE FROM analytics_visits WHERE created_at < NOW() - INTERVAL '1 year';
10-- batch delete
11WITH deleted AS (DELETE FROM analytics_visits WHERE ctid IN (SELECT ctid FROM analytics_visits WHERE created_at < NOW() - INTERVAL '1 year' LIMIT 100000) RETURNING 1) SELECT count(*) FROM deleted;