sql >> Base de Datos >  >> RDS >> PostgreSQL

Desinfecte la entrada a una columna en postgres

Primero, actualice a una versión actual de PostgreSQL. 8.1 hace mucho tiempo que murió y se olvidó y no tiene soporte y es muy, muy antiguo... ¿entiendes mi punto? La versión actual es PostgreSQL 9.2 .

Luego, usa un activador en lugar de una regla. es mas simple Es la forma en que va la mayoría de la gente. Yo sí.

Para la columna col en la tabla tbl ...

Primero, cree una función de activació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;

Luego utilícelo en un disparador .
Para Postgres 8.1 antiguo:

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

Para 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();

Podría empaquetar más cosas en un disparador, pero luego no puede condicionar el disparador ACTUALIZAR solo en una columna...