Podrías usar un cursor , pero muy poco práctico para calcular un mínimo.
Yo usaría una mesa temporal para ese propósito, y pase el nombre de la tabla para usar en SQL dinámico :
CREATE OR REPLACE FUNCTION f_min_id(_tbl regclass, OUT min_id int) AS
$func$
BEGIN
EXECUTE 'SELECT min(id) FROM ' || _tbl
INTO min_id;
END
$func$ LANGUAGE plpgsql;
Llamar:
CREATE TEMP TABLE foo ON COMMIT DROP AS
SELECT id, name
FROM users
LIMIT 50;
SELECT f_min_id('foo');
Puntos principales
-
El primer parámetro es de tipo
regclass
para evitar la inyección SQL. Más información en esta respuesta relacionada en dba. ES . -
Hice la tabla temporal
ON COMMIT DROP
para limitar su vida útil a la transacción actual. Puede o no ser lo que quieres. -
Puede extender este ejemplo para tomar más parámetros. Busque ejemplos de código para SQL dinámico con
EXECUTE
.