Você pode fazer isso usando um índice em expressões:
create unique index unq_test_a_b on (test(least(a, b), greatest(a, b));
Não acho o
unique
restrição permite expressões (e não tem um Postgres conveniente para testar agora), mas isso é essencialmente a mesma coisa.