Първо, актуализирайте до текуща версия на PostgreSQL. 8.1 отдавна е мъртъв и забравен, неподдържан и много, много стар .. разбра ли мисълта ми? Текущата версия е PostgreSQL 9.2 .
След това използвайте тригер вместо правило. По-просто е. Това е начинът, по който повечето хора вървят. Да.
За колона col
в таблица tbl
...
Първо създайте задействаща функция :
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;
След това го използвайте в тригер
.
За древния Postgres 8.1:
CREATE TRIGGER insupbef
BEFORE INSERT OR UPDATE
ON tbl
FOR EACH ROW
EXECUTE PROCEDURE trg_tbl_insupbef();
За съвременния 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();
Бихте могли да опаковате повече неща в един тригер, но тогава не можете да обусловите тригера UPDATE само за една колона ...