División de registro devuelto por función en varias columnas

En un tutorial básico de la función Postgres hay un ejemplo conOUT parámetros como este:

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;

Entonces los resultados se ven como

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.

¿Pero suponga que desea ejecutar la función en columnas que provienen de realizar una unión, y que no tiene acceso para modificar la función o usar una función alternativa? Por ejemplo, usando algunos datos de juguete:

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;

devuelve resultados en una sola columna "hi_lo" tiene valores de 2 tuplas.

Ajustar la consulta entre paréntesis e intentarselect * desde allí no cambia el formato de la salida. Entonces

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

no afecta la forma del resultado.

El siguiente intento da como resultado el error "la subconsulta debe devolver solo una columna"

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 también probéunnest pero da un error de tipo de argumento ya que los valores de tupla no se tratan como matrices.

¿Cómo puede lograr múltiples columnas en la salida cuando no puede mover la evaluación de la función alfrom ¿sección?

Respuestas a la pregunta(1)

Su respuesta a la pregunta