Najpierw zaktualizuj do aktualnej wersji PostgreSQL. 8.1 jest od dawna martwy i zapomniany, nie jest wspierany i bardzo, bardzo stary .. rozumiesz? Obecna wersja to PostgreSQL 9.2 .
Następnie użyj wyzwalacza zamiast reguły. To prostsze. To jest droga większości ludzi. tak.
Dla kolumny col
w tabeli tbl
...
Najpierw utwórz funkcję wyzwalacza :
CREATE OR REPLACE FUNCTION trg_tbl_insupbef()
RETURNS trigger AS
$BODY$
BEGIN
NEW.col := f_myfunc(NEW.col); -- your function here, must return matching type
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
Następnie użyj go w wyzwalaczu
.
Dla starożytnego Postgresa 8.1:
CREATE TRIGGER insupbef
BEFORE INSERT OR UPDATE
ON tbl
FOR EACH ROW
EXECUTE PROCEDURE trg_tbl_insupbef();
Dla współczesnego Postgresa (9.0+)
CREATE TRIGGER insbef
BEFORE INSERT OR UPDATE OF col -- only call trigger, if column was updated
ON tbl
FOR EACH ROW
EXECUTE PROCEDURE trg_tbl_insupbef();
Możesz spakować więcej rzeczy do jednego wyzwalacza, ale wtedy nie możesz warunkować wyzwalacza UPDATE tylko w jednej kolumnie ...