In einem bestimmten Königreich, in einem bestimmten Zustand ... musste ich dem Modell auf
pgModeler einen Trigger
hinzufügen . Was zu tun ist, ist einfach genug. Aber um eine Triggerfunktion hinzuzufügen ... Es ist auch einfach, aber ich musste mich ein wenig mit den Parametern befassen, die zum Füllen / Auswählen in der Benutzeroberfläche angeboten werden.
pgModeler ist ein sehr gutes Datenbank-Design-Tool, das SQL-Skripte für
PostgreSQL generieren kann. Details zu diesem Tool und seinen Funktionen finden Sie auf der offiziellen
Website .
Betrachten Sie als Beispiel ein vereinfachtes Modell mit einer einzelnen Tabelle.

Fügen Sie dem Modell eine Funktion hinzu.

Danach öffnet sich ein Fenster mit verschiedenen bearbeitbaren Parametern, mit denen die Funktion erstellt wird. Einige Felder werden jedoch bereits mit Standardwerten gefüllt.

Lassen Sie uns diese Parameter genauer betrachten.
Ich denke, dass mit den Parametern
Name ,
Schema ,
Eigentümer und
Kommentar alles klar ist - dies ist der Name der Funktion, das Datenbankschema, der Eigentümer und der Kommentar für diese Funktion.
Sprache ist der Name der Sprache, in der die Funktion implementiert wird. Um ehrlich zu sein, musste ich nie Funktionen für
PostgreSQL auf etwas anderem als
plpgsql schreiben . Daher habe ich diesen Wert für den Parameter ausgewählt.
Rückgabemethode . Da wir in der Triggerfunktion weder die Tabelle noch den Wertesatz zurückgeben müssen, verlassen wir
Simple .
Mit den Parametern im
Datentypblock ist im Allgemeinen auch alles einfach. Weil Wenn die Funktion im Trigger aufgerufen wird, geben wir im Feld
Typ den Trigger an (das Feld
Format wird automatisch mit dem
Triggerwert gefüllt). Das Feld
Dimension (das einzige nicht reservierte digitale Feld in diesem Block) wird benötigt, um die Dimension des Arrays des zurückgegebenen Werts anzugeben. Da wir jedoch nur einen Wert und kein Array benötigen, belassen wir in diesem Feld
0 .
Bei den restlichen Parametern ist zumindest für mich nicht alles so offensichtlich, weil musste bei der üblichen Erstellung von Funktionen in
PostgreSQL nie darüber nachdenken.
Der Funktionstyp kann einen von drei Werten
annehmen :
IMMUTABLE ,
STABLE und
VOLATILE . Aus der offiziellen
PostgreSQL- Dokumentation geht hervor , dass diese Argumente den Abfrageoptimierer über das Verhalten der Funktion informieren.
- IMMUTABLE bedeutet, dass die Funktion die Datenbank nicht ändern kann und für bestimmte Werte der Argumente immer das gleiche Ergebnis zurückgibt.
- STABLE bedeutet, dass die Funktion die Datenbank nicht ändern kann und innerhalb eines einzelnen Tabellenscans für bestimmte Werte der Argumente immer das gleiche Ergebnis zurückgibt.
- VOLATILE bedeutet, dass sich das Ergebnis einer Funktion auch innerhalb eines einzelnen Tabellenscans ändern kann, sodass ihre Aufrufe nicht optimiert werden können.
Wenn die Triggerfunktion das Ändern der Datenbank erfordert, ist
IMMUTABLE dementsprechend nicht geeignet. Eine Funktion mit dem Parameter
STABLE ist nicht für
AFTER- Trigger geeignet, die vom aktuellen Befehl geänderte Zeilen lesen möchten. Es bleibt
VOLATILE , das die oben genannten Probleme nicht hat. Es wird auch standardmäßig angegeben, wenn beim Erstellen der Funktion keines der oben genannten Argumente angegeben wird.
Sicherheit kann einen von zwei Werten
annehmen :
SECURITY DEFINER und
SECURITY INVOKER und ist für die Rechte des Benutzers verantwortlich, der aufgerufen wird.
- SECURITY DEFINER bedeutet, dass die Funktion mit den Rechten des Benutzers ausgeführt wird, dem sie gehört, d. H. derjenige, der auf Eigentümer aufgeführt war .
- SECURITY INVOKER bedeutet, dass die Funktion mit den Rechten des Benutzers ausgeführt wird, der sie aufgerufen hat.
Standardmäßig wird
SECURITY INVOKER verwendet , sodass Sie es verlassen können.
Das Verhalten kann einen von drei Werten
annehmen :
STRICT ,
RETURNS NULL ON NULL INPUT und
CALLED ON NULL INPUT und zeigt, wie sich die Funktion verhält, wenn ihre Argumente NULL-Werte enthalten.
- RETURNS NULL ON NULL INPUT oder STRICT bedeutet, dass die Funktion immer NULL zurückgibt , wenn mindestens eines ihrer Argumente NULL ist.
- CALLED ON NULL INPUT bedeutet, dass die Funktion wie gewohnt aufgerufen wird, auch wenn NULL zu den Argumenten gehört.
Der Standardwert ist
CALLED ON NULL INPUT . Daher können Sie es auf die gleiche Weise verlassen.
Zurückgegebene Zeilen zeigt die Anzahl der Zeilen an, die der Scheduler erwartet. Der Wert wird für Funktionen angegeben, die Mengen zurückgeben. Weil Unsere Funktion gibt einen einzelnen Wert zurück. Wir belassen
0 .
Ausführungskosten legt die Kosten für die Ausführung dieser Funktion für den Scheduler fest. Für
plpgsql ist der Standardwert
100 . Daher geben wir diesen Wert an.
Windown Func. bedeutet, dass eine Fensterfunktion erstellt wird. In unserem Fall, weil Wir benötigen eine Triggerfunktion, wir müssen diesen Wert nicht angeben (im Allgemeinen schreiben sie in der Dokumentation selbst, dass es sinnvoll ist, diesen Parameter nur für in C geschriebene Funktionen anzugeben).
Auslaufsicher zeigt an, dass die Funktion versiegelt ist, d.h. dass es keine Informationen über seine Argumente preisgibt (zum Beispiel zeigt es ihre Bedeutung nicht in einer Fehlermeldung an), außer dass ein Ergebnis zurückgegeben wird. Weil Da die Triggerfunktion keine Argumente akzeptiert, muss dieser Parameter nicht angegeben werden.
Damit sind die Parameter der Funktion beendet. Der Funktionskörper selbst kann im selben Fenster auf der Registerkarte Definition geschrieben werden. Wir erstellen den Trigger selbst.

Danach erscheint das Fenster zur Triggererstellung.

Berücksichtigen Sie die Parameter, die in diesem Fenster eingestellt werden können.
Mit den Parametern
Name ,
Alias und
Kommentar ist wieder alles klar - dies ist der Name des Triggers, Alias und Kommentar zum Trigger.
Die Auslösung zeigt, wie dieser Trigger ausgeführt wird, und kann einen der folgenden Werte annehmen:
VOR ,
NACH und
STATT VON. Dies bedeutet, dass die Funktion vor, nach oder anstelle des Ereignisses ausgeführt wird.
FÜR JEDE REIHE bestimmt, ob die Triggerprozedur für jede Zeile einmal ausgelöst wird. Wenn nicht angegeben, wird der Parameter
FOR EACH STATEMENT festgelegt, der bestimmt, dass die Triggerprozedur für die SQL-Anweisung einmal ausgelöst wird.
Ereignis bestimmt, welche Ereignisse in diesem Trigger verarbeitet werden müssen. Sie können mehrere Ereignisse angeben. Es gibt folgende Arten von Ereignissen:
INSERT ,
UPDATE ,
DELETE und
TRUNCATE . Sie treten auf, wenn der entsprechende Befehl mit derselben SQL-Anweisung aufgerufen wird.
Die Einschränkung gibt an, dass ein Einschränkungstrigger erstellt wird. Constraint-Trigger werden verwendet, um Ausnahmen auszulösen, wenn Constraints verletzt werden. Sie können mehr darüber in der offiziellen
Dokumentation lesen.
Für einen Einschränkungstrigger können Sie
Deferrable angeben, das die Triggerzeit bestimmt. Dieser Parameter kann einen der folgenden Werte
annehmen :
INITIALLY IMMEDIATE oder
INITIALLY DEFERRED .
- INITIALLY SOFORT bedeutet, dass der Trigger nach jeder Anweisung ausgelöst wird.
- INITIALLY DEFERRED bedeutet, dass der Trigger erst am Ende der Transaktion ausgelöst wird.
Siehe. Tabelle ist der Name der Tabelle, auf die durch die Einschränkung verwiesen wird. Wird für Fremdschlüsseleinschränkungen verwendet und ist nur für Einschränkungsauslöser zulässig.
Bedingung ist eine Bedingung, die bestimmt, ob die Triggerfunktion ausgeführt wird. Für
FOR EACH ROW- Trigger in diesem Feld können Sie über
OLD bzw.
NEW auf alte und neue Werte zugreifen (d. H. Dieselben wie im Hauptteil der Triggerfunktion).
Argumente - Eine Liste von Argumenten, die beim Auslösen des Triggers an die Triggerfunktion übergeben werden. String-Konstanten werden als Argumente an die Funktion übergeben.
Spalten - können nur für
UPDATE- Ereignisse angegeben werden. Der Trigger funktioniert nur, wenn sich mindestens eine der angegebenen Spalten in der Liste der in
UPDATE angegebenen Spalten befindet.
Fazit
Das ist im Allgemeinen alles. Ich hoffe das war interessant und wird jemandem nützlich sein.
Beim Schreiben dieses Artikels wurde pgModeler Version 0.9.2-alpha verwendet,
die unter Windows 7 x64 erstellt wurde. Bei Verwendung älterer / neuerer Versionen von pgModeler sind geringfügige Unterschiede in der Benutzeroberfläche möglich.
Das im Artikel verwendete Modell kann hier heruntergeladen
werden .