2013-08-05 17 views
10

Ich habe eine Triggerfunktion:Wie kann ich den Tabellennamen in einer PostgreSQL-Triggerfunktion erhalten?

CREATE OR REPLACE FUNCTION "trigger_deleteUsers"() 
RETURNS trigger AS 
$BODY$ 
BEGIN 
    INSERT INTO "DeletedEntities" ("uuidKey", "dateCreated", "dateModified", "dateSynced", "username", "entityName") 
     VALUES (OLD."uuidKey", OLD."dateCreated", OLD."dateModified", "dateSynced", OLD."username", 'Users'); 
    RETURN NULL; 
END; 
$BODY$ 
LANGUAGE plpgsql; 

CREATE TRIGGER "deleteUsers" AFTER DELETE ON "Users" FOR EACH ROW EXECUTE PROCEDURE "trigger_deleteUsers"(); 

Dies ist für die Tabelle „Benutzer“ funktioniert. Jedes Mal, wenn ich eine Zeile aus der Tabelle "Users" lösche, fügt die Datenbank eine Zeile mit ("uuidKey", "dateCreated", "dateModified", "dateSynced", "Benutzername", "entityName") in die Tabelle "DeletedEntities" ein Ich werde später für die Synchronisierung verwenden.

Das obige funktioniert. Hier ist mein Problem mit zwei Dutzend Tischen. Ich weiß, ich muss TRIGGER für jede Tabelle erstellen, aber ich möchte nicht eine benutzerdefinierte Trigger-Funktion für jede Tabelle erstellen müssen. Die einzige Sache, die sich von der ersten Funktion oben ändern würde, ist der letzte Wert in der INSERT-Anweisung innerhalb der Funktion; anstatt "Benutzer" wäre es "Ledger" oder "Journal" oder was auch immer.

Wie bekomme ich innerhalb einer PostgreSQL-Triggerfunktion den Namen der Tabelle, zu der auch die OLD-Zeile gehört?

Antwort

Verwandte Themen