Function Returns Type in View verwenden

Hallo,

ich habe eine Tabelle mit Angeboten. Am Angebot hängen diverse Konditionseinträge also Preise die nach mehreren Dimensionen unterschieden werden. Z.B. Region, Gewicht, Zeit. Es gibt eine Funktion die mir zum Angebot und den Dimensionen die aktuellen Preise und weitere Informationen (Bsp. Preis ist in der Gruppe des Kunden definiert) über einen benutzerdefinierten Typ zurückliefert.
Für ein GUI möchte ich eine View bereitstellen die mir zum Angebot auch den wichtigsten Preispunkt mit seinen Zusatzinformationen bereitstellt. Über einen Trigger sollen beim Insert und Update die Daten in die passenden Tabellen verteilt werden.
(Bisher liegt die Logik im GUI, ist aber umständlich. Die Verarbeitung möchte ich in die Datenbank legen)

Create table angebote (angebotsid integer, kundenid integer, gueltigab date);
Create Type typePreis as (wert numeric(6,2), gueltigab date, herkunft integer);
--da sind noch mehr Parameter
Create Function get_preis(inAngebotsid integer, inGueltigam date) Returns typePreis as $$
Declare
  p typePreis;
Begin
  --Dummydaten statt wirklicher Preisermittlung
  p.wert := 9.99;
  p.gueltigab := '2015-01-01';
  --sagen wir 0 = Gruppenpreis, 1 = Kundenpreis
  p.herkunft := 0;
  Return p;
End;
$$
LANGUAGE plpgsql;

Jetzt hätte ich gerne eine View die mir aus der Tabelle und der Funktion alle Spalten liefert also
a.angebotsid, a.kundenid, a.gueltigab, p.wert, p.gueltigab, p.herkunft
Kann ich Tabelle und Funktion verknüpfen?

Also: komplex zusammengestellten Record ans GUI liefern, Record wird bearbeitet und beim zurückschreiben über einen Trigger verteilt.

Grüße
Uli

prinzipiell geht das, Du kannst eine Tabelle und eine Funktion ja z.B. joinen.

Hmm, das habe ich nicht hinbekommen.

select * from get_preis(4711, '2015-04-24') as p
 inner join angebote as a
    on 1 = 1
 where a.angebotsid = 4711

Der eine Funktionsparamter ist die Angebotsid aber wie kriege ich den Parameter auf die angebotsid der Tabelle gesetzt?

Google bitte nach “postgresql join a set returning function”

Danke, die Suchbegriffe habens gebracht.
Da ich noch mit postgreSQL 9.2 unterwegs bin geht das mit dem Lateral Join nicht, aber auf Stackoverflow gibts auch dafür eine Lösung

select angebotsid, (p).*  --die Klammer ist notwendig
  from (select angebotsid, get_preis(angebotsid, '2015-04-24') as p from angebote) sub

siehe auch hier