В cte select я объединяю id фиксированного размера в качестве ключа сортировки:
with recursive cte(
uno_id,
uno_tp,
pnt_uno_id,
status,
title,
content,
sorter,
depth )
as( select
uno.uno_id,
uno.uno_tp,
uno.pnt_uno_id,
uno.status,
uno.title,
uno.content,
uno.uno_id::text,
1
from uno
where uno.uno_id = \$1
union all
select uno.uno_id,
uno.uno_tp,
uno.pnt_uno_id,
uno.status,
uno.title,
uno.content,
cte.sorter || '-' || uno.uno_id::text,
cte.depth + 1 AS depth
from uno
join cte ON uno.pnt_uno_id = cte.uno_id
)
select *
from cte
order by sorter;
и вот список, показывающий столбцы uno_id
и sorter
:
1152288185909250, 1152288185909250
1158885255675908, 1152288185909250-1158885255675908
1158885255675906, 1152288185909250-1158885255675906
1158885255675907, 1152288185909250-1158885255675906-1158885255675907
Как видите, второй ряд неуместен - на самом деле он должен быть последним.
Как я могу это исправить?
<ч />
НИКОГДА. Постгрес работал правильно. Транспорт между сервером и клиентом не поддерживал правильное упорядочение массива.
Извините за ненужные царапины на голове и спасибо.