sql >> Databasteknik >  >> RDS >> PostgreSQL

Rensa indata till en kolumn i postgres

Uppdatera först till en aktuell version av PostgreSQL. 8.1 är sedan länge död och glömd och saknar stöd och väldigt, väldigt gammal .. förstår du min poäng? Nuvarande version är PostgreSQL 9.2 .

Använd sedan en trigger istället för en regel. Det är enklare. Det är så de flesta går. Det gör jag.

För kolumn col i tabellen tbl ...

Skapa först en triggerfunktion :

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;

Använd den sedan i en trigger .
För antikens Postgres 8.1:

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

För dagens 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();

Du kan packa fler saker i en utlösare, men då kan du inte villkora UPPDATERING-utlösaren på bara en kolumn ...




  1. SQL-tillstånd [99999]; felkod [17004]; Ogiltig kolumntyp:1111 Med Spring SimpleJdbcCall

  2. Har problem med att matcha rader i databasen med PDO

  3. Orsakas av:org.postgresql.util.PSQLEundantag:FATAL:lösenordsautentisering misslyckades för användaradministratören

  4. Hur infogar jag i en databas endast om ett värde har ändrats?