2013-08-05 13 views
10

Ho una funzione di innesco:Come posso ottenere il nome della tabella in una funzione di trigger PostgreSQL?

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"(); 

Questo funziona per la tabella "Utenti". Ogni volta che elimino una riga dalla tabella "Utenti" il database inserisce una riga con ("uuidKey", "dateCreated", "dateModified", "dateSynced", "username", "entityName") nella tabella "DeletedEntities" che Userò per scopi di sincronizzazione più tardi.

Quanto sopra funziona. Ecco il mio problema che ho circa due dozzine di tavoli. So che ho bisogno di CREARE TRIGGER su ogni tabella, ma non voglio creare una funzione di trigger personalizzata per ogni tabella. L'unica cosa che cambierebbe dalla prima funzione sopra è l'ultimo valore nell'istruzione INSERT all'interno della funzione; invece di 'Utenti' sarebbe "Ledger", o "Journal", o qualsiasi altra cosa.

All'interno di una funzione di trigger PostgreSQL, come si ottiene il nome della tabella di appartenenza della riga OLD?

risposta

Problemi correlati