Il n'est pas pris en charge de regarder au-delà de la ligne actuelle dans une contrainte CHECK.
http://www.postgresql.org/docs/9.1/interactive/sql-createtable.html indique :
Une contrainte de vérification spécifiée en tant que contrainte de colonne ne doit référencer que la valeur de cette colonne, tandis qu'une expression apparaissant dans une contrainte de table peut référencer plusieurs colonnes.
Actuellement, les expressions CHECK ne peuvent pas contenir de sous-requêtes ni faire référence à des variables autres que les colonnes de la ligne actuelle.
Il y a de bonnes raisons à cette restriction, mais si vous aimez jongler avec des torches enflammées tout en conduisant un monocycle dans un trafic dense, vous pouvez contourner la restriction à l'aide de fonctions. Les situations dans lesquelles cela ne sera pas reviens mordre tu es rare; vous seriez beaucoup plus sûr d'appliquer l'invariant dans le code du déclencheur à la place.
http://www.postgresql.org/docs/9.1/interactive/triggers.html