Retornar vários campos como um registro no PostgreSQL com PL / pgSQL
Estou escrevendo um SP, usando PL / pgSQL.
Quero retornar um registro, composto por campos de várias tabelas diferentes. Poderia ser algo como isto:
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;
Como posso retornar os campos de tabelas diferentes como campos em um único registro?
[Editar]
Percebi que o exemplo que dei acima era um pouco simplista demais. Alguns dos campos que eu preciso recuperar, serão salvos como linhas separadas na tabela do banco de dados que está sendo consultada, mas eu quero devolvê-los na estrutura de registros 'nivelada'.
O código abaixo deve ajudar a ilustrar mais:
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