PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Дезинфекцирайте входа в колона в postgres

Първо, актуализирайте до текуща версия на PostgreSQL. 8.1 отдавна е мъртъв и забравен, неподдържан и много, много стар .. разбра ли мисълта ми? Текущата версия е PostgreSQL 9.2 .

След това използвайте тригер вместо правило. По-просто е. Това е начинът, по който повечето хора вървят. Да.

За колона col в таблица tbl ...

Първо създайте задействаща функция :

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;

След това го използвайте в тригер .
За древния Postgres 8.1:

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

За съвременния 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();

Бихте могли да опаковате повече неща в един тригер, но тогава не можете да обусловите тригера UPDATE само за една колона ...




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Забравих паролата, която въведох по време на инсталацията на postgres

  2. Функция за задействане на Postgres

  3. Деактивиране на DELETE на таблица в PostgreSQL?

  4. Кога можем да използваме идентификационен номер вместо неговото име в PostgreSQL?

  5. Проблеми с връзката с SQLAlchemy и множество процеси