Я хочу создать триггер перед вставкой и проверить внутри триггерной функции значения summary_id новой строки, которая будет вставлена, чтобы увидеть, существует ли summary_id в таблице. если он существует, то триггер должен вернуть значение null, поскольку я не хочу вставлять повторяющиеся значения. Я написал эту функцию, но, когда я попытался добавить новую повторяющуюся строку, она была вставлена успешно!создать триггер перед вставкой
CREATE OR REPLACE FUNCTION trigger_ack_bi()
RETURNS trigger AS $$
--DECLARE
-- max_points INTEGER;
BEGIN
IF(TG_OP = 'INSERT') THEN
IF NEW.ack_summary_id = (SELECT ack_summary_id FROM scm_main.tbl_ack WHERE scm_main.tbl_ack.ack_summary_id = NEW.ack_summary_id LIMIT 1) THEN
RETURN NULL;
ELSE
RETURN NEW;
END IF;
END IF;
END;
$$LANGUAGE plpgsql;
CREATE TRIGGER trigger_ack_bi BEFORE INSERT ON
scm_main.tbl_ack
FOR EACH ROW
EXECUTE PROCEDURE trigger_ack_bi()
ALTER FUNCTION trigger_ack_bi() OWNER TO postgres;
Почему бы не просто создать уникальный индекс и обработать любые ошибки, исходящие из этого? Гораздо более надежным и быстрым, чем триггер. –
. Вы могли бы расширить свой комментарий, чтобы быть более понятным. – Saman
Сделайте столбец 'NOT NULL' и создайте уникальный индекс:' создайте уникальный индекс на tbl_ack (ack_summary_id) '. Это все, что вам нужно, никакого триггера не требуется –