Primeiro, atualize para uma versão atual do PostgreSQL. 8.1 está morto e esquecido há muito tempo e sem suporte e muito, muito antigo .. você entendeu? A versão atual é PostgreSQL 9.2 .
Em seguida, use um gatilho em vez de uma regra. É mais simples. É o caminho que a maioria das pessoas vai. Eu faço.
Para a coluna
col
na tabela tbl
... Primeiro, crie uma função de gatilho :
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;
Em seguida, use-o em um trigger .
Para o antigo Postgres 8.1:
CREATE TRIGGER insupbef
BEFORE INSERT OR UPDATE
ON tbl
FOR EACH ROW
EXECUTE PROCEDURE trg_tbl_insupbef();
Para o Postgres moderno (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();
Você pode empacotar mais coisas em um gatilho, mas não pode condicionar o gatilho UPDATE em apenas uma coluna ...