Devuelve múltiples campos como un registro en PostgreSQL con PL / pgSQL
Estoy escribiendo un SP, usando PL / pgSQL.
Quiero devolver un registro, compuesto por campos de varias tablas diferentes. Podría verse así:
CREATE OR REPLACE FUNCTION get_object_fields(name text)
RETURNS RECORD AS $
BEGIN
-- fetch fields f1, f2 and f3 from table t1
-- fetch fields f4, f5 from table t2
-- fetch fields f6, f7 and f8 from table t3
-- return fields f1 ... f8 as a record
END
$ language plpgsql;
¿Cómo puedo devolver los campos de diferentes tablas como campos en un solo registro?
[Editar]
Me di cuenta de que el ejemplo que di arriba era un poco demasiado simplista. Algunos de los campos que necesito recuperar se guardarán como filas separadas en la tabla de la base de datos que se está consultando, pero quiero devolverlos en la estructura de registro 'aplanada'.
El siguiente código debería ayudar a ilustrar más a fondo:
CREATE TABLE user (id int, school_id int, name varchar(32));
CREATE TYPE my_type (
user1_id int,
user1_name varchar(32),
user2_id int,
user2_name varchar(32)
);
CREATE OR REPLACE FUNCTION get_two_users_from_school(schoolid int)
RETURNS my_type AS $
DECLARE
result my_type;
temp_result user;
BEGIN
-- for purpose of this question assume 2 rows returned
SELECT id, name INTO temp_result FROM user where school_id = schoolid LIMIT 2;
-- Will the (pseudo)code below work?:
result.user1_id := temp_result[0].id ;
result.user1_name := temp_result[0].name ;
result.user2_id := temp_result[1].id ;
result.user2_name := temp_result[1].name ;
return result ;
END
$ language plpgsql