Możesz to zrobić za pomocą indeksu wyrażeń:
create unique index unq_test_a_b on (test(least(a, b), greatest(a, b));
Nie sądzę, aby unique
ograniczenie zezwala na wyrażenia (i nie mam wygodnego Postgresa do testowania w tej chwili), ale to w zasadzie to samo.