Trigger "Tabellenferne" Werte mitgeben

Hallo Zusammen,

ich habe einen trigger der nach einem insert oder update in eine tabelle ausgelöst wird.

nun möchte ich gerne dem trigger quasi parameter übergeben die nichts mit der tabelle (in die inserted oder updated wurde) zu tun haben.

Beispiel

CREATE TABLE a (
    action text
);

CREATE TABLE c (
    action text,
    actionid bigint,
);

CREATE OR REPLACE FUNCTION trigger_a(
    ) RETURNS trigger AS
$trigger_a$
BEGIN
    INSERT INTO c(action, actionid) VALUES(NEW.action, ???); -- Was soll hier rein ?
    RETURN NULL;
END;
$trigger_a$
LANGUAGE plpgsql;

CREATE TRIGGER trigger_a AFTER INSERT OR UPDATE ON a FOR EACH ROW EXECUTE PROCEDURE trigger_a(); -- evtl hier die moeglichkeit parameter zu uebergeben ?

insert into a (action) values('testtext') -- triggert den trigger_a aber wie von hier dem trigger zusaetzliche params uebergeben ?

Danke

Sigh

Sollen die Werte erraten werden oder wie hängen die mit der Insert/Update-Aktion zusammen?

Andreas

das beispiel ist extrem einfacher gemacht worden.

hintergrund ist der. Verschiedene Clientsoftwares machen ein connect zu der DB um eine action einzutragen.

dazu führen sie

insert into a (action) values(‘testtext’) – triggert den trigger_a aber wie von hier dem trigger zusaetzliche params uebergeben ?

aus.

nun soll die id für die action vergeben werden und es in eine 2. tabelle zusammen mit der action schreiben.

problem ist nun das nicht jedes insert into a eine neue actionid bekommen soll.

dafür existiert eine sequence die von jedem client per nextval aufgerufen wird wenn er eine neue actionid benötigt.

tabelle a soll mit der actionid nicht belastet werden.

warum nciht einfach ein 2. insert into b ?

weil die aufrufe von insert into a so häufig vorkommen, das es unglaublich viel arbeit wäre überall noch ein insert into b hinzuzufügen

hmm habe meine antwort nochmal gelesen. es ist noch komplizierter und würde extrem lange dauern alles nierderzuschreiben.

darum die Grundfrage nochmal anders.

kann man triggern einen externen parameter mitgeben oder nicht ?

im endeffekt soll von außen noch eine nummer mitgegeben werden. diese nummer bestimmt der client und die nummer soll nicht in tabelle a sondern nur in tabelle c landen (zusammen mit den infos aus tabelle a)

Wie willst Du einem insert into … diesen Parameter mitgeben?

im endeffekt soll von außen noch eine nummer mitgegeben werden. diese nummer bestimmt der client und die nummer soll nicht in tabelle a sondern nur in tabelle c landen (zusammen mit den infos aus tabelle a)

Eine Funktion, die mit den Werten für beide Tabellen aufgerufen wird und den Rest macht?

Andreas

Wie willst Du einem insert into … diesen Parameter mitgeben?

tja genau meine frage.

ich kann einem trigger params mitgeben bsp.

CREATE TRIGGER trigger_a AFTER INSERT OR UPDATE ON a FOR EACH ROW EXECUTE PROCEDURE trigger_a(‘dies ist ein text’);

und über TG_ARGV[] auch darauf zugreifen.

aber der parameter ist nun statisch. wie mache ich ihn dynamisch ?

z.B.

CREATE TRIGGER trigger_a AFTER INSERT OR UPDATE ON a FOR EACH ROW EXECUTE PROCEDURE trigger_a(dynamic bigint);

und dann die frage wie kann ich wenn der trigger gefeuert wird diesen parameter mit leben füllen ?

wie gebe ich einem insert mit das in dem dynamic param des trigger eine 1234 steht ?

Dein Trigger ist FOR EACH ROW. Ich schätze mal, da ist kein Weg, bei einem Insert von N Rows auch so viele dynamische Variablen mitzugeben. Macht auch alles irknwie keinen Sinn. Eine Alternative nannte ich. Irgendwie mußt Du ja die Inhalte angeben, die zu speichern sind.

Andreas

  1. du kannst für eine triggerfunktion parameter definieren
  2. du kannst bei der verwendung der triggerfunktion in einem konkreten trigger (per CREATE TRIGGER) den parametern argumente mitgeben - also statisch bei Definition
  3. du kannst diese parameter aber nicht mit dem INSERT, der den Trigger auslöst veraendern