Para obter colunas individuais em vez do tipo de linha, chame a função com:
SELECT * FROM testfunction();
Assim como você selecionaria todas as colunas de uma tabela.
Considere também esta forma revisada de sua função de teste:
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$;
Em particular:
O
DECLARE
palavra-chave só é necessária uma vez. Evite declarar parâmetros que já estão (implicitamente) declarados como
OUT
parâmetros na RETURNS TABLE (...)
cláusula. Não use identificadores de caso CaMeL sem aspas no Postgres. Funciona, os identificadores sem aspas são convertidos em letras minúsculas, mas pode levar a erros confusos. Ver:
- Os nomes das colunas do PostgreSQL diferenciam maiúsculas de minúsculas?
A tabela temporária no exemplo é completamente inútil (provavelmente simplificada demais). O exemplo dado se resume a:
CREATE OR REPLACE FUNCTION testfunction(OUT a int, OUT b int)
LANGUAGE plpgsql AS
$func$
BEGIN
a := 0;
b := 0;
END
$func$;