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?