sql >> Base de Datos >  >> RDS >> PostgreSQL

CREATE VIEW especifica más nombres de columnas que columnas

Considere el ejemplo simple:

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

Cuando se llama a una función en el contexto de columna/variable, devuelve el valor único del tipo de retorno especificado. Aquí está la fuente del error:select de la vista devuelve solo una columna.

Sin embargo, si se llama a la función en el contexto de la tabla, devuelve los valores como una tabla verdadera:

postgres=# select * from foofunc();
╔═══╤═══╗
║ a │ b ║
╠═══╪═══╣
║ 1 │ a ║
╚═══╧═══╝

Por lo tanto, debe utilizar el segundo enfoque al crear la vista:

CREATE VIEW v1 (c1, c2, c3, c4, c5) AS
  SELECT * FROM f1 (1, 2);