O código proprietário (que não podemos alterar) possui várias funções definidas pelo usuário do tipo:
create or replace function f() returns record as $$ ... $$
que chamamos da seguinte forma (por exemplo):
SELECT status, log FROM f() as (status boolean, log text);
(status boolean, log text)
é um tipo de linha da tabela T
. É possível converter automaticamente o record
(ou setof record
tipo de retorno) no tipo de T
linha sem listar os atributos? O que procuro é do tipo:
SELECT * FROM f() as T%rowtype
Há uma maneira.
Dada uma tabela
t
e uma funçãof()
que retorna um registro anônimo que corresponderia a esse tipo de tabela:Você não pode simplesmente converter o registro anônimo, pois uma lista de definição de coluna é necessária para
Citando o manual sobre o comando SELECT :
Ênfase em negrito minha.
Então, enquanto todas essas consultas funcionam:
Nenhum destes faz:
Este último levantando uma exceção:
Você pode agrupar a
SELECT
lista de definição de coluna em umaVIEW
função ou como @a_horse e @deszo sugeridos. Isso funcionaria muito bem:Mas isso não responderia à sua pergunta:
Solução para linha única
Enquanto uma conversão falha, uma atribuição em plpgsql funciona.
Ligar:
Embora você também possa escrever uma função de retorno de conjunto com esse padrão, não encontrei uma maneira
SELECT
de fazer uma função de retorno de conjunto sem fornecer uma lista de definição de coluna ...db<>fiddle aqui
Old sqlfiddle