Возможно ли создать триггерную функцию добавляющую значение в две таблицы, если в одной из таблиц значение уже занято primary key?
Прошу помощи с проблемой.
Есть две простейшие таблицы.
CREATE TABLE primer1 (id INT PRIMARY KEY, s TEXT );
CREATE TABLE primer2 (id INT, s TEXT);
С добавленными туда значениями:
INSERT INTO primer1 VALUES (1, 'a'), (2, 'b');
INSERT INTO primer2 VALUES (2, 'c');
Необходимо создать триггерную функцию, которая будет добавлять значение в первую и вторую таблицы, а при наличии значения в первой таблице, добавлять только во вторую.
Пишу простую функцию, делаю триггер:
CREATE OR REPLACE FUNCTION function1()
RETURNS TRIGGER
AS $$
BEGIN
INSERT INTO primer2(id, s) VALUES (NEW.id, NEW.s);
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER trigger1
AFTER INSERT ON primer1
FOR EACH ROW
EXECUTE PROCEDURE function1();
Все работает до момента попытки добавить запись со значением id равным 2, прописав это через INSERT INTO primer1, так как значение 2 уже занято как Primary Key.
Возможно ли это вообще?
Пытался переделывать функции различными способами,например:
CREATE OR REPLACE FUNCTION primer2()
RETURNS TRIGGER AS $$
DECLARE
exist_id INT;
BEGIN
SELECT id INTO exist_id FROM primer1 WHERE s = NEW.s LIMIT 1;
IF NOT FOUND THEN
insert into primer3 (id, s) values (NEW.id, NEW.s);
end if;
insert into primer4 (id, s) values (NEW.id, NEW.s);
return new;
end;
$$ language plpgsql;
Но либо не работает, либо выходят ошибки.Менял срабатывание триггера AFTER/BEFORE тоже безрезультатно.
Просьба подсказать возможно ли создать функцию, которая будет проверять значение в первой таблице, не выдавая ошибку в связи с занятым как Primary Key значением, если таковое присутствует и добавлять значение во вторую таблицу?