Объявление структуры кортежа записи в PL / pgSQL

Я не могу найти ничего в документации PostgreSQL, которая показывает, как объявлять запись или строку при одновременном объявлении структуры кортежа. Если вы не определяете свою структуру кортежа, вы получаете ошибку "Структура кортежа еще не назначенной записи является неопределенной".

Это то, что я делаю сейчас, и это прекрасно работает, но должен быть лучший способ сделать это.

CREATE OR REPLACE FUNCTION my_func()
  RETURNS TABLE (
    "a" integer,
    "b" varchar
  ) AS $
DECLARE r record;
BEGIN

CREATE TEMP TABLE tmp_t (
    "a" integer,
    "b" varchar
);
-- Define the tuple structure of r by SELECTing an empty row into it.
-- Is there a more straight-forward way of doing this?
SELECT * INTO r
FROM tmp_t;

-- Now I can assign values to the record.
r.a := at.something FROM "another_table" at
       WHERE at.some_id = 1;

-- A related question is - how do I return the single record 'r' from
-- this function?
-- This works:
RETURN QUERY
SELECT * FROM tmp_t;

-- But this doesn't:
RETURN r;
-- ERROR:  RETURN cannot have a parameter in function returning set

END; $ LANGUAGE plpgsql;

Ответы на вопрос(3)

Ваш ответ на вопрос