Эта тема является частью этой проблемы thread, на которую я ищу лучшее решение для одной части от TRIGGER. Я просто хочу запустить триггер для преобразования в правильные скобки. Я думаю, должен ли я возвращаться с триггера NULL или что-то еще до запуска.Чтобы проигнорировать результат в TRIGGER PostgreSQL?
Код
CREATE OR REPLACE FUNCTION insbef_events_function()
RETURNS TRIGGER AS
$func$
DECLARE
m int[];
BEGIN
FOREACH m SLICE 1 IN ARRAY TG_ARGV[0]::int[]
LOOP
INSERT INTO events (measurement_id, event_index_start, event_index_end)
SELECT NEW.measurement_id, m[1], m[2]; -- Postgres array starts with 1 !
END LOOP;
-- do something with _result ...
RETURN NULL; -- result ignored since this is an BEFORE trigger TODO right?
END
$func$ LANGUAGE plpgsql;
, который я использую в функции
CREATE OR REPLACE FUNCTION f_create_my_trigger_events(_arg1 int, _arg2 text, _arg3 text)
RETURNS void AS
$func$
BEGIN
EXECUTE format($$
DROP TRIGGER IF EXISTS insbef_ids ON events
CREATE TRIGGER insbef_ids
BEFORE INSERT ON events
FOR EACH ROW EXECUTE PROCEDURE insbef_events_function(%1$L)$$
, translate(_arg2, '[]', '{}'), translate(_arg3, '[]', '{}')
);
END
$func$ LANGUAGE plpgsql;
Я не уверен насчет этой линии: RETURN NULL; -- result ignored since this is an
ДО trigger TODO right?
, так как я думаю, что это имеет место в AFTER
триггером, но не в перед триггером.
Я просто хочу запустить триггер для преобразования правильных скобок.
Тестовая команда sudo -u postgres psql detector -c "SELECT f_create_my_trigger_events(1,'[112]','[113]');"
, получив следующую ошибку из-за непонимания возвращающейся-вещи, я думаю.
LINE 3: CREATE TRIGGER insbef_ids ^ QUERY: DROP TRIGGER IF EXISTS insbef_ids ON events CREATE TRIGGER insbef_ids BEFORE INSERT ON events FOR EACH ROW EXECUTE PROCEDURE insbef_events_function('{112}') CONTEXT: PL/pgSQL function f_create_my_trigger_events(integer,text,text) line 4 at EXECUTE statement
Как вы можете управлять BEFORE
триггеры в PostgreSQL 9.4?
@ErwinBrandstetter Да, ваш!Я потратил несколько дней на тестирование ваших предложений в разных условиях, и они работали, но забыли принять ваш ответ. –