Возвращать несколько полей в виде записи в PostgreSQL с PL / pgSQL

Я пишу SP, используя PL / pgSQL.
Я хочу вернуть запись, состоящую из полей из нескольких разных таблиц. Это может выглядеть примерно так:

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; 

Как я могу вернуть поля из разных таблиц как поля в одной записи?

[Edit]

Я понял, что приведенный выше пример был слишком упрощенным. Некоторые из полей, которые мне нужно получить, будут сохранены в виде отдельных строк в запрашиваемой таблице базы данных, но я хочу вернуть их в «плоской» структуре записи.

Приведенный ниже код должен помочь проиллюстрировать дальнейшие действия:

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
64
задан Erwin Brandstetter 27 March 2013 в 03:49
поделиться