PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

CREATE VIEW gibt mehr Spaltennamen als Spalten an

Betrachten Sie das einfache Beispiel:

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

Wenn eine Funktion im Spalten-/Variablenkontext aufgerufen wird, gibt sie den einzelnen Wert des angegebenen Rückgabetyps zurück. Hier ist die Fehlerquelle:select der Ansicht gibt nur eine Spalte zurück.

Wenn die Funktion jedoch im Tabellenkontext aufgerufen wird, gibt sie die Werte wie eine echte Tabelle zurück:

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

Daher sollten Sie beim Erstellen der Ansicht den zweiten Ansatz verwenden:

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