Возможно ли создать триггерную функцию добавляющую значение в две таблицы, если в одной из таблиц значение уже занято 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 значением, если таковое присутствует и добавлять значение во вторую таблицу?


Ответы (0 шт):