PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Sanitize a entrada para uma coluna no postgres


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 ...