Рефакторинг функции PL / pgSQL для возврата результатов различных запросов SELECT

Я написал функцию, которая выводит PostgreSQLSELECT запрос хорошо сформирован в текстовом виде. Теперь я больше не хочу выводить текст, но на самом деле запускаю сгенерированныйSELECT утверждение против базы данных и вернуть результат - так же, как и сам запрос.

What I have so far:
CREATE OR REPLACE FUNCTION data_of(integer)
  RETURNS text AS
$BODY$
DECLARE
   sensors varchar(100);   -- holds list of column names
   type    varchar(100);   -- holds name of table
   result  text;           -- holds SQL query
       -- declare more variables

BEGIN
      -- do some crazy stuff

      result := 'SELECT\r\nDatahora,' || sensors ||
      '\r\n\r\nFROM\r\n' || type ||
      '\r\n\r\nWHERE\r\id=' || $1 ||'\r\n\r\nORDER BY Datahora;';

      RETURN result;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION data_of(integer) OWNER TO postgres;

sensors содержит список имен столбцов для таблицыtype, Они объявлены и заполнены в ходе функции. В конце концов, они содержат такие значения, как:

sensors: 'column1, column2, column3'
Except for Datahora (timestamp) all columns are of type double precision.

type :'myTable'
Can be the name of one of four tables. Each has different columns, except for the common column Datahora.

Definition of the underlying tables.

Переменнаяsensors будет держатьall столбцы отображаются здесь для соответствующей таблицы вtype, Например: еслиtype являетсяpcdmet затемsensors будет'datahora,dirvento,precipitacao,pressaoatm,radsolacum,tempar,umidrel,velvento'

Переменные используются для построенияSELECT заявление, которое хранится вresult, Подобно:

SELECT Datahora, column1, column2, column3
FROM   myTable
WHERE  id=20
ORDER  BY Datahora;

Прямо сейчас моя функция возвращает это утверждение какtext, Я копирую-вставляю и выполняю его в pgAdmin или через psql. Я хочу автоматизировать это, выполнить запрос автоматически и вернуть результат. Как я могу это сделать?

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

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