Большая проблема с триггерами вставки представления на непростых представлениях - вы не знаете, что вставляется. В этом случае это может быть Категория или Части или оба. Ваш триггер должен обрабатывать оба. Здесь это не является большой проблемой:
create or replace function insert_view_func()
returns trigger
language plpgsql
as $$
begin
insert into category (category_name) values(new.category_name)
on conflict do nothing;
insert into parts (category_id, part_name)
select category_id, new.part_name
from category
where category_name = new.category_name;
return new;
end ;
$$ ;
Это, однако, не главная проблема здесь. Ваша модель данных устанавливает отношение 1: M между категорией: детали. Не проблема, если вы действительно этого хотите, но это открывает потенциальную проблему. Поскольку Part_Name не уникален, он открывает возможность для нескольких деталей с одинаковым именем (см. fiddle ), но каждая из них связана с отдельной категорией. Это может стать довольно запутанным. Чтобы избежать этого, вы можете рассмотреть отношения M: M и создать таблицу разрешения. Другим вариантом будет изменение функции триггера для проверки существующего part_name. Еще лучше сделать Part_Name уникальным.