several ways to do it, here's one:
check (coalesce(a,b,c) not null)
if you want one or the other to be present, but not both see this
thread:
http://archives.postgresql.org/pgsql-general/2006-09/msg00207.php
> -----Original Message-----
> From: pgsql-general-owner@postgresql.org
> [mailto:pgsql-general-owner@postgresql.org] On Behalf Of
> Matthew Terenzio
> Sent: Thursday, November 02, 2006 4:11 PM
> To: PostgreSQL general
> Subject: [GENERAL] not null across multiple columns
>
>
> here is an interesting question (to me)
>
> suppose you wanted to be certain that either one of two or
> more columns were present
>
> Like in a user table, either a username or an email need to
> be present to create a row.
>
> You can't use not null because it's an either or situation.
>
> what's the best method to accomplish this sort of constraint?