Per ottenere singole colonne invece del tipo di riga, chiama la funzione con:
SELECT * FROM testfunction();
Proprio come faresti per selezionare tutte le colonne da una tabella.
Considera anche questo modulo rivisto della tua funzione di test:
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$;
In particolare:
Il DECLARE
la parola chiave è necessaria solo una volta.
Evita di dichiarare parametri che sono già (implicitamente) dichiarati come OUT
parametri nella RETURNS TABLE (...)
clausola.
Non utilizzare identificatori di casi CaMeL non quotati in Postgres. Funziona, gli identificatori senza virgolette vengono convertiti in minuscolo, ma può causare errori di confusione. Vedi:
- I nomi delle colonne di PostgreSQL fanno distinzione tra maiuscole e minuscole?
La tabella temporanea nell'esempio è completamente inutile (probabilmente troppo semplificata). L'esempio riportato si riduce a:
CREATE OR REPLACE FUNCTION testfunction(OUT a int, OUT b int)
LANGUAGE plpgsql AS
$func$
BEGIN
a := 0;
b := 0;
END
$func$;