Ι tenho a seguinte visão:
CREATE OR REPLACE VIEW public.my_view as
SELECT
col1,
col11
from
table_a JOIN table_b on table_a.id=table_b.a_id
join
(
select id,col56 from table_c where col56 > 3
) as filtered_c on table_a.id=filtered_c.a_id;
tabela_a é:
id: SERIAL PK
col1: INTEGER
tabela_b é:
id: SERIAL PK
col11: INTEGER
a_id FK table_a
tabela_c é:
id: SERIAL PK
col56 INTEGER
a_id FK table_a
Como vi no wiki do postgresql , posso inserir valores nas visualizações que correspondem às tabelas apropriadas. Mas no meu caso se eu inserir:
INSERT INTO my_view VALUES (7,88);
Em qual tabela os valores serão inseridos? Até onde eu sei, as visualizações são tabelas somente leitura.
Uma exibição que contém uma junção não é atualizável automaticamente, ou seja, você não pode simplesmente inserir nessa exibição. O manual diz (ênfase minha):
A única maneira de inserir em uma view que não atende a esses requisitos é criar um
INSTEAD OF INSERT
trigger nela, caso em que quais valores vão para quais tabelas é determinado pela lógica implementada naquele trigger.