Můžete to udělat pomocí indexu na výrazech:
create unique index unq_test_a_b on (test(least(a, b), greatest(a, b));
Nemyslím si, že je unique
omezení umožňuje výrazy (a zrovna teď nemáte vhodný Postgres k testování), ale to je v podstatě to samé.