PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Função Postgres retornando tabela não retornando dados em colunas


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