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

PostgreSQL:Como retornar linhas dinâmicas da tabela sem usar a lista de definição de coluna?


A manipulação de anyelement como um tipo de retorno é descrito em Tipos polimórficos :

Este argumento no seu caso é relation_name digitado como anyelement , e passando NULL::table1 , isso realmente informa ao planejador que essa chamada específica de function1 deve retornar SETOF table1 . Até agora tudo bem.

Agora o problema é que uma vez executada, a função não retorna SETOF table1 mas outra coisa. Isso não é o que o executor estava esperando, daí o erro.

Apesar do título da pergunta ser Como retornar linhas dinâmicas... , o que você parece querer são colunas dinâmicas ou conjuntos de resultados polimórficos.

E esta é uma batalha árdua com o SQL, pois para construir o plano de execução de uma consulta, o planejador precisa conhecer cada coluna com seu tipo para cada resultado intermediário. Se você projetar sua consulta com uma função que deve ser executada para encontrar a estrutura de sua saída, isso cria um problema da galinha e do ovo:o planejamento deve preceder a execução, não pode depender disso.

Com sua técnica de inferência de tipo dinâmica aplicada a anyelement , o PostgreSQL já está empurrando o envelope para implementar o máximo de polimorfismo possível devido a essa restrição.