PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

CREATE VIEW specifica più nomi di colonna che colonne

Considera il semplice esempio:

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

Quando una funzione viene chiamata nel contesto di colonna/variabile, restituisce il valore singolo del tipo restituito specificato. Ecco la fonte dell'errore:select della vista restituisce solo una colonna.

Tuttavia, se la funzione viene chiamata nel contesto della tabella, restituisce i valori come una vera tabella:

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

Quindi dovresti usare il secondo approccio quando crei la vista:

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