-- name: IncrementPostStatsView :exec WITH visitor AS ( INSERT INTO post_viewers ( post_id, ip, last_viewed_at ) VALUES ( $1, $2, NOW() ) ON CONFLICT (post_id, ip) DO UPDATE SET last_viewed_at = NOW() WHERE post_viewers.last_viewed_at < NOW() - INTERVAL '30 minutes' RETURNING post_id ) INSERT INTO post_stats ( post_id, view ) SELECT post_id, 1 FROM visitor ON CONFLICT (post_id) DO UPDATE SET view = post_stats.view + 1;