Есть таблица с данными и функция:
CREATE TABLE IF NOT EXISTS in_table(
in_key INTEGER NOT NULL,
in_tst TIMESTAMPTZ NOT NULL,
in_val FLOAT NOT NULL);
INSERT INTO in_table (in_key, in_tst, in_val)
SELECT
(random()*30)::INT, tstamp, random()*80 - 40
FROM
generate_series(
NOW() - INTERVAL '90 days',
NOW(),
'1 min'
) AS tstamp;
CREATE OR REPLACE FUNCTION _Foo(st TIMESTAMP, fin TIMESTAMP)
RETURNS TABLE (out_key INTEGER, out_tst timestamptz, out_val FLOAT) AS $$
DECLARE
BEGIN
RETURN QUERY SELECT in_key, in_tst, in_val
FROM in_table
WHERE in_tst BETWEEN st AND fin;
END;
$$ LANGUAGE plpgsql;
Как переписать функцию, чтобы она динамически формировала возврат таблицы, что то наподобие этого "псевдокода":
CREATE OR REPLACE FUNCTION _Foo(st TIMESTAMP, fin TIMESTAMP)
RETURNS TABLE (out_key INTEGER, out_tst timestamptz, out_val FLOAT) AS $$
DECLARE
BEGIN
EXECUTE FORMAT('
RETURN QUERY SELECT %I, %I, %I
FROM %I
WHERE %I BETWEEN %I AND %I;
', in_key, in_tst, in_val, in_table, in_tst, st, fin);
END;
$$ LANGUAGE plpgsql;