PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Assainir l'entrée d'une colonne dans postgres

Tout d'abord, mettez à jour vers une version actuelle de PostgreSQL. 8.1 est mort depuis longtemps et oublié et non pris en charge et très, très vieux .. vous comprenez ce que je veux dire ? La version actuelle est PostgreSQL 9.2 .

Ensuite, utilisez un déclencheur au lieu d'une règle. C'est plus simple. C'est la façon dont la plupart des gens vont. Oui.

Pour la colonne col dans le tableau tbl ...

Tout d'abord, créez une fonction de déclenchement :

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;

Utilisez-le ensuite dans un déclencheur .
Pour l'ancien Postgres 8.1 :

CREATE TRIGGER insupbef
  BEFORE INSERT OR UPDATE
  ON tbl
  FOR EACH ROW
  EXECUTE PROCEDURE trg_tbl_insupbef();

Pour Postgres moderne (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();

Vous pouvez regrouper plus de choses dans un déclencheur, mais vous ne pouvez pas conditionner le déclencheur UPDATE sur une seule colonne ...