Puoi farlo usando un indice sulle espressioni:
create unique index unq_test_a_b on (test(least(a, b), greatest(a, b));
Non credo che il unique
il vincolo consente le espressioni (e non ha un Postgres conveniente su cui testare in questo momento), ma questa è essenzialmente la stessa cosa.