Divida o registro retornado pela função em várias colunas

Em um tutorial básico da função do Postgres, há um exemplo comOUT parâmetros assim:

create or replace function hi_lo(a numeric, 
                                 b numeric, 
                                 c numeric, 
                                 OUT hi numeric, 
                                 OUT lo numeric)
as $
begin
hi := greatest(a, b, c);
lo := least(a, b, c);
end; $
language plpgsql;

Então os resultados parecem

select hi_lo(2, 3, 4);
-- returns one column, "hi_lo" with value "(4, 2)".

select * from hi_lo(2, 3, 4);
-- returns two columns, "hi" / 4 and "lo" / 2.

Mas suponha que você queira executar a função nas colunas que vêm da execução de uma junção e que você não tem acesso para modificar a função ou usar uma função alternativa? Por exemplo, usando alguns dados de brinquedos:

select hi_lo(a.actor_id, length(a.name), ma.movie_id) 
from 
    actors a 
join 
    movies_actors ma 
on 
    a.actor_id = ma.movie_id 
limit 10;

retorna resultados em uma única coluna "hi_lo" com valores de 2 tuplas.

Envolvendo a consulta entre parênteses e tentando umselect * a partir dele não altera o formato da saída. assim

select *
from (
    select hi_lo(a.actor_id, length(a.name), ma.movie_id) 
    from 
        actors a 
    join 
        movies_actors ma 
    on 
        a.actor_id = ma.movie_id 
    limit 10;
) rr

não afeta a forma do resultado.

A tentativa a seguir resulta no erro "subconsulta deve retornar apenas uma coluna"

select (
    select * from hi_lo(a.actor_id, length(a.name), ma.movie_id)
) 
from 
    actors a 
join 
    movies_actors ma 
on
    a.actor_id = ma.movie_id 
limit 10;

Finalmente, eu também tenteiunnest mas gera um erro de tipo de argumento, pois os valores da tupla não são tratados como matrizes.

Como você pode obter várias colunas na saída quando não pode mover a avaliação da função para ofrom seção?

questionAnswers(1)

yourAnswerToTheQuestion