Skript mit Trigger aufrufen

christofj

Fleissiger Benutzer
Beiträge
55
Hallo zusammen,

ich versuche mit einem Trigger ein Pythonsktipt aufzurufen. An das Pythonskript soll noch die ID aus der Tabelle als Argument übergeben werden. Bis jetzt habe ich diese Funktion erstellt:

Code:
=# CREATE OR REPLACE FUNCTION executeDataCheck()
   RETURNS TRIGGER
   AS $executeDataCheck$
   #!/bin/sh
   python3 /home/user/pythonskript.py sID
   $$
   LANGUAGE plsh;

Dazu habe ich diesen Trigger erstellt:
Code:
=# CREATE TRIGGER executeDataCheck
   AFTER INSERT OR UPDATE ON
   module_related_references FOR
   EACH ROW EXECUTE PROCEDURE
   executedatacheck(s_id);

Leider funktioniert das so nicht. Wie kann ich aus einer Tabelle die ID an das Pythonskript übergeben?
In der Doku habe ich was von TG_ARGV[] gelesen. Mir ist aber nicht klar wie ich damit auf ein einzelnes Spaltenelement zugreifen soll.
Danke vorab
 
Werbung:
einige Fragen/Dinge/Ideen:

* plsh ist installiert und funktioniert?
* das kann nur als DB-Superuser gehen, weil plsh untrusted ist
* auf Elemente des alten/neuen Datensatzen kannst Du via OLD.* und NEW.* zugreifen, den * mit den Spaltennamen ersetzen
* es ist nicht unbedingt eine gute Idee, externe Programme aufzurufen, nicht nur wegen der Sicherheit. Was exakt willst Du mit der Triggerfunktion denn machen? Wenn es nur ein Check der Daten sind, dann solltest Du eher plphyton nutzen, ohne dem 'u' hinten.
 
Es ist so, dass in einer weiteren (ersten) Tabelle immer wieder neue Daten eingetragen werden. In der Tabelle mit der sID wird "mitgezählt" das in der ersten Tabelle Daten eingetragen wurden. Das Skript ruft dann die Daten aus der ersten Tabelle ab und führt ein paar prüfende Berechnungen dieser neuen Werte aus. Je nach dem Was diese Prüfung ergibt wird eine Mail aus den Skript generiert. Die sID ist sozusagen ein Fremdschlüssel auf die erste Tabelle.
 
Wenn ich mir die Doku ansehe (das ist jetzt mit dem u hinten, eine andere habe ich auf die schnelle nicht gefunden):
PostgreSQL: Documentation: 11: 46.2. PL/Python Functions

verstehe ich trotzdem noch nicht so recht wie die Daten aus der Tabelle zu dem Skript kommen sollen.
Wie ich da bis jetzt verstanden habe kann ich an den Trigger kein Parameter/Variablen übergeben richtig?
Rufe ich dann in meinem Fall, in dem Skript, NEW.sID auf wenn durch die Erhöhung des Zählers der Trigger ausgelöst wird?
Ich würde ungern alles ich die Funktion von postgers reinpacken. Das Skript ruft nämlich noch Funktionen auf anderen Skripten auf.
 
Werbung:
Hallo nochmal,

ich will hier nur kurz mein Lösung mitteilen, da mir in diesem Forum schon viel geholfen wurde und vielleicht hat jemand eine ähnliche Aufgabenstellung.
Ich weiß das ist noch nicht so effektiv aber für meine Sache reicht es erstmal.

Code:
CREATE OR REPLACE FUNCTION calldatacheck()
RETURNS trigger LANGUAGE plpython3u AS
$$import os
os.system("/usr/bin/python3 /home/user/datacheck.py '" + str(TD["new"]["sensor_id"]) + "'") $$;


CREATE TRIGGER executePython
AFTER INSERT OR UPDATE ON module_related_references
FOR EACH ROW EXECUTE PROCEDURE calldatacheck();
 
Zurück
Oben