#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? Также, какой запрос вызывает эту ошибку?