Una variante della soluzione di Neil che non necessita di un'estensione è:
create table friendz (
from_id int,
to_id int
);
create unique index ifriendz on friendz(greatest(from_id,to_id), least(from_id,to_id));
Tuttavia, la soluzione di Neil ti consente di utilizzare un numero arbitrario di colonne.
Facciamo entrambi affidamento sull'utilizzo di espressioni per costruire l'indice che è documentatohttps://www.postgresql.org/docs/current/indexes-expressional.html