Non è supportato guardare oltre la riga corrente in un vincolo CHECK.
http://www.postgresql.org/docs/9.1/interactive/sql-createtable.html dice:
Un vincolo di controllo specificato come vincolo di colonna deve fare riferimento solo al valore di quella colonna, mentre un'espressione che appare in un vincolo di tabella può fare riferimento a più colonne.
Attualmente, le espressioni CHECK non possono contenere sottoquery né fare riferimento a variabili diverse dalle colonne della riga corrente.
Ci sono buone ragioni per questa restrizione, ma se ti piace destreggiarti con torce fiammeggianti mentre guidi un monociclo nel traffico intenso, puoi sovvertire la restrizione usando le funzioni. Le situazioni in cui ciò non torna a mordere sei raro; saresti invece molto più sicuro applicare l'invariante nel codice trigger.
http://www.postgresql.org/docs/9.1/interactive/triggers.html