Удаление строки после обновления

#postgresql

#postgresql

Вопрос:

У меня есть следующая таблица под названием «вторая»

    TABLE public.second
  (
  userid bigint,
  companyid bigint
    )
  

и таблица с именем visibility_matrix

  CREATE TABLE public.visibility_matrix
(
   name character varying,
   companyid bigint
 )
  

Я создал триггер после обновления «второй» таблицы, я хочу удалить строку в матрице видимости, я пытался достичь этого путем удаления строки с идентификатором компании в visibility_matrix, но это не сработало, есть предложения? вот триггер:

СОЗДАТЬ ИЛИ ЗАМЕНИТЬ ФУНКЦИЮ pos_org_rel_refresh() ВОЗВРАЩАЕТ триггер КАК

 $$  
  DECLARE
  r Integer ;

BEGIN  


IF TG_OP='UPDATE' THEN

DELETE FROM visibility_matrix where companyid=NEW.companyid;
END IF;


  END;
$$  
LANGUAGE 'plpgsql';  

  CREATE TRIGGER test_trigger  
  AFTER UPDATE OR DELETE
  ON second
  FOR EACH ROW  
  EXECUTE PROCEDURE pos_org_rel_refresh();
  

Комментарии:

1. выполняется ли триггер? можете ли вы опубликовать код, который создает сам триггер?

2. Это то же самое, кроме последних 2 строк:D

3. Я имел в виду код, начинающийся с CREATE TRIGGER , чтобы убедиться, что триггер действительно создан, вы видите его там, когда вы d second ?

4. Я понимаю, я отредактировал это!

Ответ №1:

вам не хватает инструкции return, это должно это исправить:

 CREATE OR REPLACE FUNCTION pos_org_rel_refresh() RETURNS trigger AS

$$  
  DECLARE
  r Integer ;

BEGIN  


IF TG_OP='UPDATE' THEN

    DELETE FROM visibility_matrix where companyid=NEW.companyid;
    RETURN NEW;
END IF;

RETURN NULL;
END;
$$  
LANGUAGE 'plpgsql';  
  

Комментарии:

1. Я обновил поле, но получаю ошибку: ОШИБКА: в записи «new» нет поля «companyid» КОНТЕКСТ: инструкция SQL «УДАЛИТЬ ИЗ visibility_matrix, где companyid=NEW.companyid» Функция PL / pgSQL pos_org_rel_refresh() строка 10 в инструкции SQL

2. Можете ли вы подтвердить, что во второй таблице есть столбец companyid? Также, какой запрос вызывает эту ошибку?