PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

La funzione Postgres restituisce la tabella che non restituisce i dati nelle colonne

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$;