PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Em INSERT para uma tabela INSERT dados em tabelas conectadas


pgAdmin é apenas a interface gráfica. Você quer dizer PostgreSQL , o RDBMS .

Uma restrição de chave estrangeira , como você apenas impõe que nenhum valor pode ser usado, que não está presente na coluna referenciada. Você pode usar ON UPDATE CASCADE ou ON DELETE CASCADE para propagar as alterações da coluna referenciada, mas você não pode criar novas linhas com ele como você descreve. Você pegou a ferramenta errada.

O que você descreve pode ser alcançado com um trigger . Outra maneira mais complexa seria uma RULE . Vá com um gatilho aqui.

No PostgreSQL você precisa de uma função de gatilho , principalmente usando plpgsql e um gatilho em uma mesa que faz uso dele.

Algo como:
CREATE OR REPLACE FUNCTION trg_insert_row_in_tbl2()
  RETURNS trigger AS
$func$
BEGIN
   INSERT INTO tbl2 (my_id, col1)
   VALUES (NEW.my_id, NEW.col1)     -- more columns?

   RETURN NEW;  -- doesn't matter much for AFTER trigger
END
$func$  LANGUAGE plpgsql;

E um gatilho AFTER INSERT em tbl1 :
CREATE TRIGGER insaft
AFTER INSERT ON tbl1
FOR EACH ROW EXECUTE PROCEDURE trg_insert_row_in_tbl2();