Как я могу использовать «операторы IF» в триггере postgres - PullRequest
3 голосов
/ 16 июня 2010

У меня есть триггерная функция, которую я хочу запускать только в определенных случаях INSERTS, в данном случае, if do_backup = true. Если он срабатывает во всех случаях, я получаю бесконечный цикл. Логика кажется мне довольно простой, а остальные функции работают. Но функция триггера, похоже, не регистрирует мои условия и всегда запускается, даже когда backup = true.

CREATE OR REPLACE FUNCTION table_styles_backup() RETURNS
 TRIGGER AS $table_styles_backup$

 DECLARE
 ...
 do_backup  boolean;

    BEGIN
 SELECT backup INTO do_backup FROM table_details WHERE id=NEW.table_meta_id;

        IF (do_backup = true) THEN 

  ...


            INSERT INTO table_styles_versions 
   (
   ...
   )

  VALUES (
   ...
   );
 END IF;

    RETURN NULL;

    END;

$table_styles_backup$  LANGUAGE plpgsql;

CREATE TRIGGER table_styles_backup AFTER INSERT ON table_styles

FOR EACH ROW EXECUTE PROCEDURE table_styles_backup();

1 Ответ

4 голосов
/ 17 июня 2010

Согласно документации , вам не нужно явно тестировать логические типы данных в операторе IF - они по умолчанию проверяют на истинность, поэтому вы используете:

IF do_backup THEN
  ...
  INSERT INTO table_styles_versions (...
ELSE
  -- omit this & the ELSE keyword if nothing needs to happen if do_backup is false
END IF;
...