Event-Trigger

Kampfgummibaerlie

Datenbank-Guru
Beiträge
736
Ich erstelle den Thread, um gegebenenfalls mehr über Event-Trigger zu erfahren.

Sind diese nur für die "Archivierung" gedacht, oder für irgendwas besonderes anderes auch?
Kann man da potenziell (weil die ja auch in C schreibbar sind, soweit ich weiß) irgendwas spezielles mit QR-Codes oder ähnlichem machen?

Ich habe mir auf die Schnelle, als Motivation für den Thread einen einfachen Event-Trigger gebaut:
Code:
create table for_insert(value int);
create function on_drop() returns event_trigger as $$
begin
insert into for_insert(value) values (1);
end;
$$ language plpgsql;
create event trigger on_drop on sql_drop execute function on_drop();
create table for_drop();
drop table for_drop;
select * from for_insert;

Resultat:
screeny.png

Erklärung was mein Hintergedanke dabei war:
Mitnotieren, falls eine Tabelle gelöscht wird.
Kann man damit auch irgendwie großartig im privaten ITBereich was großartiges machen?

Danke schonmal :D
 
Werbung:
Du kannst alle DDL Statements loggen. Nicht nur DROP, sondern vielleicht spannender ALTER, CREATE, ..

Es wäre z.B. praktisch, wenn Du versehentlich Dein Datenmodell ruinierst und auf einen bestimmten Stand zurück kommen möchtest, von dem Du keine konsistenten Schritte hast.
Du könntest Namensregeln überwachen und notfalls forcieren.
Indizes automatisch erzeugen, wenn ein FK angelegt wird.
..

Wahrscheinlich für den Privatgebrauch alles etwas over the top.
 
wenn ich mich recht erinnere, hat 2ndQ solche Event-Trigger entwickelt, um auf DDL-Ereignisse in einer (Multimaster)-Replikation reagieren zu können.
 
ist meine Annahme richtig, dass man einen solchen Trigger so einrichten kann, dass falls zB eine Maschine ausfällt, falls jemand in den folgenden 7 Tagen als Mieter für diese Maschine eingetragen ist darüber per Mail oder so informiert wird?
Bzw. bekommt derjenige eine andere Maschine zugeteilt, müsste man das auch über einen Event-Trigger machen?
Ich bin mir ungemein sicher, dass eine andere Maschine zuteilen auch mit einer "simplen" Trigger-Funktion machbar ist, aber wenn die Person dann automatisch eine Mail oder so bekommt, wärs schon leiwand :D (leiwand = toll ;) )

Wie ich das langsam verstehe, braucht man für alles, was außerhalb der Datenbank arbeitet einen Event-Trigger?

Habe gelesen, man kann mit der Sprache C solche Event-Trigger-Funktionen schreiben, sollte ich mir das aus privatem Interesse aneignen?

Ich meine, das ganze Projekt wird nie live gewesen sein, aber ich hatte bisher (habe ich immernoch) enorm viel Freude, wenn was neues kommt, was ich mir aneigne :D

mein privater Spaß wird immer umfangreicher :S

LG
Kampfgummibaerlie
 
nein. Es gibt 'normale' Trigger, die bei Insert/Update/Delete feuern, und es gibt Event-Trigger, die bei CREATE TABLE, DROP TABLE etc. feuern.
Das solltest Du erst einmal strikt trennen.

Was Du beschreibst ist erst einmal ein normaler Trigger.

Senden von Mail: dazu bräuchtest Du eine Funktion in einer untrusted Language und das müßte als Superuser laufen. Das ist kein gutes Konzept.
Besser: Du befüllst eine Jobtabelle mit dem Daten, mit denen die Mail zu erstellen ist. Via z.B. Cron schaust Du dann regelmäßig, ob in dieser Jobtabelle was steht. Falls ja, führtst Du das extern aus und löscht dann, wenn die Mail z.B. raus ist, diesen Eintrag.
 
Werbung:
Besser: Du befüllst eine Jobtabelle mit dem Daten, mit denen die Mail zu erstellen ist. Via z.B. Cron schaust Du dann regelmäßig, ob in dieser Jobtabelle was steht. Falls ja, führtst Du das extern aus und löscht dann, wenn die Mail z.B. raus ist, diesen Eintrag.
Oder man setzt ein Flag (Zeitstempel), wenn das erfolgreich erledigt wurde. Dann hat man hier eine Nachverfolgung.
 
Zurück
Oben