In PostgreSQL, how do I make it so that either column A or column B must be non-null?
You need a table-level check constraint:
alter table &lt;name&gt;
  add constraint either_email
    check (email is not null or p2pmail is not null);

If you're only allowed to enter one, but not both:
alter table &lt;name&gt;
  add constraint either_email
    check (email is null &lt;&gt; p2pmail is null);

The second form is possibly a little confusing at first glance: what it does is compare both columns' null status -- they aren't allowed to be the same.
The constraint can also be created simultaneously with the table:
create table &lt;name&gt; (
  ... columns ...
  constraint either_email check (email is not null or p2pmail is not null)
);