Refatorar uma função PL / pgSQL para retornar a saída de várias consultas SELECT
Eu escrevi uma função que gera um PostgreSQLSELECT
consulta bem formada em forma de texto. Agora eu não quero mais dar saída a um texto, mas na verdade rodar o geradoSELECT
declaração contra o banco de dados e retornar o resultado - assim como a consulta em si.
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
mantém a lista de nomes de coluna para a tabelatype
. Aqueles são declarados e preenchidos no decorrer da função. Eventualmente, eles mantêm valores como:
sensors
: 'column1, column2, column3'
Exceto porDatahora
(timestamp
) todas as colunas são do tipodouble precision
.
type
:'myTable'
Pode ser o nome de uma das quatro tabelas. Cada um tem colunas diferentes, exceto pela coluna comumDatahora
.
Definição das tabelas subjacentes.
A variávelsensors
vai segurartodos colunas exibidas aqui para a tabela correspondente emtype
. Por exemplo: setype
épcdmet
entãosensors
será'datahora,dirvento,precipitacao,pressaoatm,radsolacum,tempar,umidrel,velvento'
As variáveis são usadas para construir umSELECT
declaração que é armazenada emresult
. Gostar:
SELECT Datahora, column1, column2, column3
FROM myTable
WHERE id=20
ORDER BY Datahora;
No momento, minha função retorna essa declaração comotext
. Eu copio e colo e executo no pgAdmin ou via psql. Eu quero automatizar isso, executar a consulta automaticamente e retornar o resultado. Como eu posso fazer isso?