В PostgreSQL не можете да използвате израз с псевдоним в ред по. Там работят само обикновени псевдоними. Вашата заявка трябва да изглежда така:
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;
Предполагам, че имате предвид, че l2.user_id=l.user_id
трябва да вървя първи.
Това е подходящо съобщение в общия пощенски списък на PostgreSQL. Следното е в документацията на ORDER BY
клауза:
Всеки израз може да бъде име или пореден номер на изходна колона (SELECT елемент от списъка) или може да бъде произволен израз, образуван от входна колона ценности .
Така че няма псевдоними, когато се използва израз.