PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Disinfetta l'input in una colonna in postgres

Innanzitutto, aggiorna a una versione corrente di PostgreSQL. 8.1 è morto da tempo e dimenticato, non supportato e molto, molto vecchio .. hai capito? La versione attuale è PostgreSQL 9.2 .

Quindi, utilizza un trigger invece di una regola. È più semplice. È il modo in cui la maggior parte delle persone va. Sì.

Per la colonna col nella tabella tbl ...

Innanzitutto, crea una funzione trigger :

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;

Quindi usalo in un trigger .
Per l'antico Postgres 8.1:

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

Per i giorni nostri 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();

Potresti comprimere più cose in un trigger, ma poi non puoi condizionare il trigger UPDATE solo su una colonna ...