alter table orders add constraint payment_xor_check(
  (credit_card_payment_id is not null)::integer +
  (paypal_payment_id is not null)::integer +
  (promotional_payment_id is not null)::integer = 1
);
