PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

CREATE VIEW spécifie plus de noms de colonnes que de colonnes

Prenons l'exemple simple :

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

Lorsqu'une fonction est appelée dans le contexte colonne/variable, elle renvoie la valeur unique du type renvoyé spécifié. Voici la source de l'erreur :le select de la vue renvoie une seule colonne.

Cependant, si la fonction est appelée dans le contexte de la table, elle renvoie les valeurs comme une vraie table :

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

Vous devez donc utiliser la seconde approche lors de la création de la vue :

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