2012-04-01 8 views
0

Ich bin ein postgresql Benutzer und ich versuche, dies zu folgen: http://www.postgresql.org/docs/current/interactive/sql-createtrigger.htmlAuslöser .. vor und nach mit bestimmten Spalte geändert

CREATE TRIGGER check_update 
    BEFORE UPDATE ON accounts 
    FOR EACH ROW 
    WHEN (OLD.balance IS DISTINCT FROM NEW.balance) 
    EXECUTE PROCEDURE check_account_update(); 

aber mit AFTER anstatt vor. und ich bekomme immer einen Fehler bei oder in der Nähe von WANN. tut das, weil ich BEFORE verwenden muss? Was ist, wenn ich das Verfahren nach dem Aktualisieren der Spalte ausführen muss und es sich wirklich geändert hat?

+1

Welchen Fehler bekommen Sie und wie sieht Ihr 'create trigger' aus? –

+1

Und welche Version von PostgreSQL verwenden Sie? –

+0

i erhalten: Syntaxfehler bei oder in der Nähe von 'WHEN' LINE 1: ... check_update AFTER UPDATE AUF Konten für jeden ROW WHEN (OLD.balance DISTINCT FROM NEW.balance IS) .... – Noon

Antwort

4

PostgreSQL 8.4 unterstützt nicht mit ausgelöst wird, wenn von der fine manual:

Synopsis

CREATE TRIGGER name { BEFORE | AFTER } { event [ OR ... ] } 
ON table [ FOR [ EACH ] { ROW | STATEMENT } ] 
EXECUTE PROCEDURE funcname (arguments) 

Es gibt keine ist, wenn dort. Sie können in Ihrer Trigger-Funktion der WHEN Logik setzen:

if old.balance is not distinct from new.balance then 
    return new; 
end if; 
-- The rest of the trigger... 

oder ein Upgrade auf mindestens PostgreSQL 9.0 und WHEN, wenn Sie den Auslöser zu schaffen.

+0

Vielen Dank! schätze deine Hilfe – Noon