Innanzitutto, aggiorna a una versione corrente di PostgreSQL. 8.1 è morto da tempo e dimenticato, non supportato e molto, molto vecchio .. hai capito? La versione attuale è PostgreSQL 9.2 .
Quindi, utilizza un trigger invece di una regola. È più semplice. È il modo in cui la maggior parte delle persone va. Sì.
Per la colonna col
nella tabella tbl
...
Innanzitutto, crea una funzione trigger :
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;
Quindi usalo in un trigger
.
Per l'antico Postgres 8.1:
CREATE TRIGGER insupbef
BEFORE INSERT OR UPDATE
ON tbl
FOR EACH ROW
EXECUTE PROCEDURE trg_tbl_insupbef();
Per i giorni nostri Postgres (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();
Potresti comprimere più cose in un trigger, ma poi non puoi condizionare il trigger UPDATE solo su una colonna ...