Puede hacer esto usando un índice en expresiones:
create unique index unq_test_a_b on (test(least(a, b), greatest(a, b));
No creo que el unique
La restricción permite expresiones (y no tiene un Postgres conveniente para probar en este momento), pero esto es esencialmente lo mismo.