update

hallo,
ich habe eine sql, die folgendermaßen aussieht und auch funktioniert:

update test
set a=b
from test1 where c=d;

wie muss dann die trigger funktion aussehen?

begin
update test
set a=b
from test1 where c=d;
return ???;
end;

so geht es schon mal nicht, welches return muss ich denn hier nehmen? und versteht pgsql, dass c eine spalte von test und d eine spalte von test1 ist?
danke schon mal für hinweise an einen pgsql newbie

Trigger geben OLD oder NEW zurück.

und versteht pgsql, dass c eine spalte von test und d eine spalte von test1 ist?
danke schon mal für hinweise an einen pgsql newbie

Du kannst für die Tabellen auch Alias-Namen verwenden bzw. allgemein den Tabellennamen mit angeben. Das ist sogar zwingend, wenn es nicht eindeutig ist. Ist es eindeutig, dann erkennt PG auch, was gemeint ist.

Andreas

zu1. natürlich habe ich schon ein return new eingegeben (und auch sonst schon so einige variationen), da kam aber folgende fehlermeldung

stack depth limit exceeded

zu2. kann man aliase einsetzen oder muss man? ist die funktion prinzipiell falsch oder richtig?

Nun, wenn Du in einem UPDATE einen Trigger aufrufst, der ein UPDATE macht, dann feuert dieses UPDATE wieder einen TRIGGER, der ein UPDATE macht. Dieses UPDATE aber feuert einen Trigger, der ein UPDATE macht. Dieses UPDATE aber feuert einen Trigger, der ein UPDATE macht. Dieses UPDATE aber feuert einen Trigger, der ein UPDATE macht. Dieses UPDATE aber feuert einen Trigger, der ein UPDATE macht.



Ich könnte nun das per Copy&Paste so oft wiederholen, bis Xandrians Server platzt. Weil ich aber ein netter Mensch bin, mache ich das nicht.

zu2. kann man aliase einsetzen oder muss man? ist die funktion prinzipiell falsch oder richtig?

Depends. Manchmal muß man Zwischenergebnissen einen Alias geben, damit diese überhaupt einen Namen haben.

test=# select * from s2;
 id | name
----+------
  1 | test
(1 row)

test=*# select foo.id, foo.name from s2 foo;
 id | name
----+------
  1 | test
(1 row)

test=*# select bar.id, bar.name from (select foo.id, foo.name from s2 foo)bar;
 id | name
----+------
  1 | test
(1 row)

test=*# select batz.id, batz.name from (select bar.id, bar.name from (select foo.id, foo.name from s2 foo)bar)batz;
 id | name
----+------
  1 | test
(1 row)

Andreas

hallo andreas,

als erstes muss ich wohl aufhören zum erstellen der funktion den pgadmin zu benutzen, da wird einem vieles nicht bewusst, wenn man nur die sql syntax hinein kopiert.
dann reicht hier wohl ein einfaches select.
danke für den hinweis