2017-01-07 7 views
1

Ich habe eine allgemeine Frage zu Triggern. Gibt es trotzdem eine Möglichkeit, die SQL-Datenbank so zu programmieren, dass SQL, wann immer ein Trigger ausgelöst wird, uns sagt, welche Datenzeilen entfernt oder bearbeitet wurden, um die eigenen Kriterien zu erfüllen. In meinem Fall verwende ich PostgreSQL und ich habe einen spezifischen Auslöser, der bestimmte Reihen löscht, die in eine Tabelle eingefügt werden, wenn ein bestimmtes Kriterium erfüllt wird. Gibt es etwas, ich hinzufügen oder ändern Sie die Einstellungen in postgreSQL, die mir anzeigt, welche Zeilen und wie viele Zeilen in diesem Fall gelöscht wurden:SQL Trigger Informationen

CREATE TRIGGER unknowns 
AFTER INSERT 
ON employees 
FOR EACH ROW 
EXECUTE PROCEDURE delete_rows(); 


CREATE OR REPLACE FUNCTION delete_rows() 
RETURNS trigger AS 
$BODY$ 
BEGIN 
DELETE FROM employees WHERE Customer = 'unknown'; 
RETURN NEW; 
END; 
$BODY$ 
LANGUAGE plpgsql VOLATILE 
COST 100; 
+0

@No Name, es löst in meiner Datenbank fein aus. Bitte fühlen Sie sich zu ändern, wenn Sie es besser machen können, ich möchte nur benachrichtigt werden, wie viele Zeilen gelöscht werden, sobald die Tabelle eingefügt wird. –

+0

Es scheint, dass Sie nach einem Audit-Trigger suchen. Siehe [hier] (http://cjauvin.blogspot.de/2013/05/impossibly-lean-audit-system-for.html) oder [hier] (http://okbob.blogspot.co.uk/2015/) 01/most-simply-implementation-of-history.html) oder [hier] (http://8kb.co.uk/blog/2015/01/19/copying-pavel-stehules-simple-history-table-but -mit-dem-jsonb-type /) –

Antwort

1

Sie würden normalerweise nicht tun dies auf Datenbankebene.

Normalerweise würden Sie den Trigger ändern, um geänderte Daten in einer Archiv-/Verlaufstabelle zu speichern. Dann haben Sie eine Aufzeichnung der Daten, die sich geändert haben, wann sie geändert wurden und wer sie geändert hat.

Wenn Sie speziell über Änderungen initiierten in einem Trigger wissen möchten, bin ich nicht sicher, ob es einen Mechanismus gibt, um diese Änderungen von benutzerinitiierten Änderungen zu unterscheiden.

+0

In einer Archiv-/Historientabelle .... Wie ist das möglich? Ich möchte Daten speichern, die geändert/gelöscht wurden. –

+1

@AQDeveloper. . . Eine Methode besteht darin, Trigger zu haben, die alle Änderungen an der Tabelle aufzeichnen, indem sie in die History/Archive-Tabelle einfügen. –

+0

Wie kann ich diesen Tisch @ Gordon machen? Das erste Mal habe ich von einer solchen Taktik gehört. –