Du kan göra detta med hjälp av ett index på uttryck:
create unique index unq_test_a_b on (test(least(a, b), greatest(a, b));
Jag tror inte att den unique
begränsning tillåter uttryck (och har inte ett bekvämt Postgres att testa på just nu), men det här är i princip samma sak.