2016-12-30 5 views
1

Я пытаюсь создать триггер, который будет удалять строки при выполнении определенных критериев предложения where, но он выдает ошибку. Что я делаю не так?Ошибка триггера в postgreSQL

CREATE TRIGGER unknowns 
AFTER INSERT 
ON "Amazon".salesdatapcr 
FOR EACH ROW 
EXECUTE PROCEDURE delete_my_rows(); 


CREATE OR REPLACE FUNCTION delete_my_rows() 
RETURNS trigger AS 
$BODY$ 
BEGIN 
    DELETE FROM "Amazon".salesdatapcr WHERE "Builder" = 'unknown'; 
    RETURN NEW; 
END; 
$BODY$ 
LANGUAGE plpgsql VOLATILE 
COST 100; 
+0

Какая ошибка вы получаете? –

+0

Лошадь, в моем ETL Я направляю Talend на Drop table, если существует и создаю (я получаю данные еженедельно). Может быть, в нем отсутствует синтаксис вставки. Что я могу добавить к синтаксису SQL, который сделает срабатывание триггера всякий раз, когда таблица создается в postgreSQL? –

+0

До тех пор, пока вы не сообщите нам, в чем именно ошибка, вы не можете ответить на ваш вопрос. –

ответ

0

Вы должны инкапсулировать DELETE заявление в функции, поэтому триггер будет:

CREATE TRIGGER unknowns 
    AFTER INSERT 
    ON "Amazon".salesdatapcr 
    FOR EACH ROW 
    EXECUTE PROCEDURE delete_my_rows(); 

Таким образом, вы должны создать функцию следующим образом:

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

     DELETE FROM "Amazon".salesdatapcr WHERE "Builder" = 'unknown'; 
     RETURN NEW; 
    END; 

HERE вы можете найти краткое руководство по созданию триггера

+0

Спасибо Джо, функция была исполнена, но непонятная часть - это когда я вставляю таблицу salesdatapcr (используя ETL), значения «неизвестные» все еще отображаются в таблице. Почему вы думаете, что это может быть? –

+0

Пожалуйста, введите код ETL –

+0

Я использую инструмент Talend ETL. Является недоумением в том, что, хотя функция выполняется, она показывает нуль (0) в функции триггера. Он должен отображаться в рамках схемы в базе данных. Это мой первый эксперимент с триггерами. Спасибо за помощь до сих пор. –

Смежные вопросы