In PostgreSQL non puoi usare l'espressione con un alias in ordine per. Solo i semplici pseudonimi funzionano lì. La tua query dovrebbe essere simile a questa:
select distinct
l2.*,
l.user_id as l_user_id,
l.geopoint_id as l_geopoint_id
from locations l
left join locations l2 on l.geopoint_id = l2.geopoint_id
where l.user_id = 8
order by l2.geopoint_id, l.user_id = l2.user_id desc;
Presumo tu intenda quel l2.user_id=l.user_id
dovrebbe andare per primo.
Questo è un messaggio rilevante nella mailing list generale di PostgreSQL. Quanto segue è nella documentazione di ORDER BY
clausola:
Ogni espressione può essere il nome o il numero ordinale di una colonna di output (SELEZIONA elemento dell'elenco), oppure può essere un'espressione arbitraria formata da colonna di input valori .
Quindi nessun alias quando si usa l'espressione.