Para obtener columnas individuales en lugar del tipo de fila, llame a la función con:
SELECT * FROM testfunction();
Al igual que seleccionaría todas las columnas de una tabla.
También considere esta forma revisada de su función de prueba:
CREATE OR REPLACE FUNCTION testfunction()
RETURNS TABLE(a int, b int)
LANGUAGE plpgsql AS
$func$
DECLARE
_a int := 0;
_b int := 0;
BEGIN
CREATE TABLE tempTable AS SELECT _a, _b;
RETURN QUERY SELECT * FROM tempTable;
DROP TABLE tempTable;
END
$func$;
En particular:
El DECLARE
la palabra clave solo se necesita una vez.
Evite declarar parámetros que ya están (implícitamente) declarados como OUT
parámetros en la RETURNS TABLE (...)
cláusula.
No utilice identificadores de casos CaMeL sin comillas en Postgres. Funciona, los identificadores sin comillas se escriben en minúsculas, pero puede generar errores confusos. Ver:
- ¿Los nombres de las columnas de PostgreSQL distinguen entre mayúsculas y minúsculas?
La tabla temporal en el ejemplo es completamente inútil (probablemente simplificada en exceso). El ejemplo dado se reduce a:
CREATE OR REPLACE FUNCTION testfunction(OUT a int, OUT b int)
LANGUAGE plpgsql AS
$func$
BEGIN
a := 0;
b := 0;
END
$func$;