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

CREATE VIEW especifica mais nomes de colunas do que colunas


Considere o exemplo simples:
postgres=# create function foofunc() returns table(a int, b text) language sql as $$ select 1, 'a'::text $$;
postgres=# select foofunc();
╔═════════╗
║ foofunc ║
╠═════════╣
║ (1,a)   ║
╚═════════╝

Quando uma função é chamada no contexto de coluna/variável, ela retorna o valor único do tipo de retorno especificado. Aqui está a fonte do erro:o select da view retorna apenas uma coluna.

No entanto, se a função for chamada no contexto da tabela, ela retornará os valores como uma tabela verdadeira:
postgres=# select * from foofunc();
╔═══╤═══╗
║ a │ b ║
╠═══╪═══╣
║ 1 │ a ║
╚═══╧═══╝

Portanto, você deve usar a segunda abordagem ao criar a exibição:
CREATE VIEW v1 (c1, c2, c3, c4, c5) AS
  SELECT * FROM f1 (1, 2);