входной сигнал запуска postgres для функции - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь сделать триггер, который, когда значение помещается в table1, затем копируется в table2. У меня есть следующая функция, которая работает правильно:

Create function func1(a integer) returns void
Language SQL as $$
insert into table2 values (a);$$;

и вот триггер (он не работает):

Create trigger trig1
Before update on table1
For each row
Execute function func1(old.attr1)

Я пытаюсь следовать этой документации. Вот часть, в частности, я следую:

CREATE TRIGGER log_update
    AFTER UPDATE ON accounts
    FOR EACH ROW
    WHEN (OLD.* IS DISTINCT FROM NEW.*)
    EXECUTE PROCEDURE log_account_update();

Я подумал, что old.attribute дает определенный атрибут старой строки до ее изменения. Если я ошибаюсь, дайте мне знать. Спасибо

1 Ответ

0 голосов
/ 15 ноября 2018

doc говорит о функции, которая вызывается в триггере:

Пользовательская функция, которая объявляется как не имеющая аргументов и возвращающая триггер типа, которыйвыполняется при срабатывании триггера.

Эта функция имеет доступ к объектам OLD и NEW.Вы можете изменить существующую функцию:

Create function func1()  RETURNS trigger
as $$
 BEGIN
   insert into table2 values (OLD.attr1);   
   RETURN NEW; 
 END;
$$  LANGUAGE plpgsql;

Create trigger trig1
  Before update on table1
  For each row
  Execute function func1();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...