La façon la plus simple de trouver des dates manquantes est d'utiliser une table de calendrier. J'ai posté code pour créer et remplir une table de calendrier pour PostgreSQL ; vous devriez pouvoir l'adapter sans problème.
Avec la table de calendrier en place, votre requête est assez simple et facile à comprendre. Pour trouver les dates manquantes pour octobre 2011, vous utiliseriez quelque chose dans ce sens. (Devinant à votre table "messages".)
select c.cal_date
from calendar c
left join posts p on (c.cal_date = p.date)
where p.date is null
and c.cal_date between '2011-10-01' and '2011-10-31'
and p.userid = 1
order by c.cal_date