Nejprve aktualizujte na aktuální verzi PostgreSQL. 8.1 je dávno mrtvá a zapomenutá a nepodporovaná a velmi, velmi stará .. rozumíte mi? Aktuální verze je PostgreSQL 9.2 .
Poté použijte spouštěč místo pravidla. Je to jednodušší. Tak to chodí většina lidí. Já ano.
Pro sloupec col
v tabulce tbl
...
Nejprve vytvořte funkci spouštění :
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;
Poté jej použijte v spouštěči
.
Pro starověký Postgres 8.1:
CREATE TRIGGER insupbef
BEFORE INSERT OR UPDATE
ON tbl
FOR EACH ROW
EXECUTE PROCEDURE trg_tbl_insupbef();
Pro moderní 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();
Můžete zabalit více věcí do jednoho spouštěče, ale pak nemůžete podmínit spouštěč UPDATE pouze jedním sloupcem...