Postgresql перед триггером обновления / вставки не работает - PullRequest
1 голос
/ 07 октября 2011

У меня есть следующая триггерная функция:

CREATE OR REPLACE FUNCTION update_modelname_function()
  RETURNS trigger AS
$BODY$
BEGIN
  IF tg_op = 'INSERT' THEN
     new.model_name := upper(new.model_name);
     RETURN new;
  END IF;
  IF tg_op = 'UPDATE' THEN
     old.model_name := upper(old.model_name);
     RETURN new;
  END IF;
END
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;

Я пытаюсь добиться, чтобы значение столбца model_name всегда было прописным, когда оно сохраняется в таблице.Однако, похоже, ничего не происходит.Есть идеи?

1 Ответ

5 голосов
/ 07 октября 2011

Вы случайно обновили old вместо new. Попробуйте:

CREATE OR REPLACE FUNCTION update_modelname_function()
  RETURNS trigger AS
$BODY$
BEGIN
  IF tg_op = 'INSERT' THEN
     new.model_name := upper(new.model_name);
     RETURN new;
  ELSIF tg_op = 'UPDATE' THEN
     new.model_name := upper(new.model_name);
     RETURN new;
  END IF;
END
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;

Если в примере показан весь код, а фактические триггеры запускаются только на INSERT и / или UPDATE, вы можете еще больше упростить:

CREATE OR REPLACE FUNCTION update_modelname_function()
  RETURNS trigger AS
$BODY$
BEGIN

new.model_name := upper(new.model_name);
RETURN new;

END
$BODY$
  LANGUAGE plpgsql VOLATILE;
...