Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PostgreSQL > триггер в postgres


Автор: Bulat 10.5.2016, 10:47
Вепрвые пишу триггер в postgresql и что делаю не так, не совсем понимаю что!

Код

CREATE FUNCTION sost_tags_filter() RETURNS TRIGGER AS $sost_tags_filter$
  BEGIN
    IF (TG_OP = 'INSERT') THEN
      CASE
        WHEN NEW.tg LIKE '%SOST_'
        THEN
          INSERT INTO sost (tg, dt, vl)
          VALUES (NEW.tg, NEW.dt, NEW.vl);
      END;
    END IF;
  END;
$sost_tags_filter$ LANGUAGE plpgsql;



ОШИБКА:  незавершённая спецстрока с $ (примерное положение: "$sost_tags_filter$ LANGUAGE plpgsql")
LINE 1: $sost_tags_filter$ LANGUAGE plpgsql
        ^
(42601)

Query not active $sost_tags_filter$ LANGUAGE plpgsql

Вот что получаю!

По смыслу - во время вставки данных в одну таблицу, если попадается строка заканчивающая на '%SOST_%', нужно эту же запись продублировать в другую таблицу!

Автор: LSD 10.5.2016, 13:00
CASE должен заканчиваться END CASE;
Код

CASE
    WHEN boolean-expression THEN
      statements
  [ WHEN boolean-expression THEN
      statements
    ... ]
  [ ELSE
      statements ]
END CASE;

Автор: Bulat 10.5.2016, 13:10
Цитата(LSD @  10.5.2016,  13:00 Найти цитируемый пост)
CASE должен заканчиваться END CASE;


Код

CREATE FUNCTION sost_tags_filter() RETURNS TRIGGER AS $sost_tags_filter$
  BEGIN
    IF (TG_OP = 'INSERT') THEN
      CASE
        WHEN NEW.tg LIKE '%SOST_'
        THEN
          INSERT INTO sost (tg, dt, vl)
          VALUES (NEW.tg, NEW.dt, NEW.vl);
      END CASE;
    END IF;
  END;
$sost_tags_filter$ LANGUAGE plpgsql;


та же ошибка

Автор: Bulat 10.5.2016, 13:42
Все разобрался! В тора у меня еще и коннект не к той базе был, там не все таблицы из процедуры существуют. Из под консоли вроде бы все прошло на ура!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)