У меня проблема с триггерами с PostgreSQL 10. Вот ситуация. У меня есть таблица с именем index_name, которая содержит столбец с именем index_ref. В этом поле я создал список значений в качестве примера: PBM PI, PBM PO, et c. Я хотел бы использовать эту таблицу для хранения действительного имени в качестве ссылки для другой таблицы с именем gis_osm_places. Итак, всякий раз, когда кто-то пытается вставить значение не в список, появится сообщение об исключении, в котором говорится: НЕ ДОПУСКАЕТСЯ ОБЯЗАТЕЛЬСТВО. ПОЖАЛУЙСТА, ИСПОЛЬЗУЙТЕ: (список ссылок) Вот мои таблицы: Вот где я нахожусь с триггером:
CREATE FUNCTION public.check_column_value()
RETURNS trigger
LANGUAGE 'plpgsql'
COST 100
VOLATILE NOT LEAKPROOF
AS $BODY$
DECLARE
ref_allowed character varying;
BEGIN
IF TG_OP = 'INSERT' OR TG_OP = 'UPDATE'
THEN
IF NEW.index_a is not null OR NEW.index_a NOT IN (SELECT index_ref from public.index_name)
THEN
ref_allowed := (SELECT string_agg(index_ref,',') from public.index_name);
RAISE EXCEPTION 'NOT ALLOWED COMMIT. PLEASE USE : %',ref_allowed;
END IF;
RETURN NEW;
END IF;
END;
$BODY$;
ALTER FUNCTION public.check_column_value()
OWNER TO "postgres";
CREATE TRIGGER check_column_value
BEFORE INSERT
ON public.gis_osm_places
FOR EACH ROW
EXECUTE PROCEDURE public.check_column_value();
На самом деле ничего не происходит, я имею в виду, что я могу добавить все, что захочу, без ошибок. Мы будем очень признательны за любую идею или обновление кода. Заранее спасибо!