У меня есть функция, которая используется как триггер INSERT. Эта функция удаляет строки, которые конфликтуют с [серийным номером в] вставляемой строкой. Он работает красиво, поэтому я бы предпочел не обсуждать достоинства концепции.
DECLARE
re1 feeds_item.shareurl%TYPE;
BEGIN
SELECT regexp_replace(NEW.shareurl, '/[^/]+(-[0-9]+\.html)$','/[^/]+\\1') INTO re1;
RAISE NOTICE 'DELETEing rows from feeds_item where shareurl ~ ''%''', re1;
DELETE FROM feeds_item where shareurl ~ re1;
RETURN NEW;
END;
Я хотел бы добавить в УВЕДОМЛЕНИЕ указание того, сколько строк затронуто (aka: deleted). Как я могу это сделать (используя LANGUAGE 'plpgsql')?
UPDATE: Основываясь на отличном руководстве от "Курица на кухне", я изменил его на это:
DECLARE
re1 feeds_item.shareurl%TYPE;
num_rows int;
BEGIN
SELECT regexp_replace(NEW.shareurl, '/[^/]+(-[0-9]+\.html)$','/[^/]+\\1') INTO re1;
DELETE FROM feeds_item where shareurl ~ re1;
IF FOUND THEN
GET DIAGNOSTICS num_rows = ROW_COUNT;
RAISE NOTICE 'DELETEd % row(s) from feeds_item where shareurl ~ ''%''', num_rows, re1;
END IF;
RETURN NEW;
END;