sql >> Databáze >  >> RDS >> PostgreSQL

Dezinfikujte vstup do sloupce v postgresu

Nejprve aktualizujte na aktuální verzi PostgreSQL. 8.1 je dávno mrtvá a zapomenutá a nepodporovaná a velmi, velmi stará .. rozumíte mi? Aktuální verze je PostgreSQL 9.2 .

Poté použijte spouštěč místo pravidla. Je to jednodušší. Tak to chodí většina lidí. Já ano.

Pro sloupec col v tabulce tbl ...

Nejprve vytvořte funkci spouště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;

Poté jej použijte v spouštěči .
Pro starověký Postgres 8.1:

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

Pro moderní 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();

Můžete zabalit více věcí do jednoho spouštěče, ale pak nemůžete podmínit spouštěč UPDATE pouze jedním sloupcem...




  1. Spojte řetězec s hodnotou pole v MySQL

  2. Jak importovat a exportovat databázi MySQL

  3. Laravel 4:vícenásobné kde s nebo ve výmluvné

  4. Jak převést postgres dvojitou přesnost na numerickou bez ztráty/zkrácení dat