PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Sur INSERT dans une table INSERT des données dans des tables connectées

pgAdmin est juste l'interface graphique. Vous voulez dire PostgreSQL , le RDBMS .

Une contrainte de clé étrangère , comme vous n'avez fait qu'imposer qu'aucune valeur ne peut être utilisée, qui n'est pas présente dans la colonne référencée. Vous pouvez utiliser ON UPDATE CASCADE ou ON DELETE CASCADE pour propager les modifications à partir de la colonne référencée, mais vous ne pouvez pas créer de nouvelles lignes avec comme tu le décris. Vous vous êtes trompé d'outil.

Ce que vous décrivez pourrait être réalisé avec un déclencheur . Une autre manière, plus complexe, serait une RULE . Allez avec un déclencheur ici.

Dans PostgreSQL, vous avez besoin d'une fonction de déclenchement , principalement en utilisant plpgsql , et un déclencheur sur une table qui en fait usage.

Quelque chose comme :

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;

Et un trigger AFTER INSERT sur tbl1 :

CREATE TRIGGER insaft
AFTER INSERT ON tbl1
FOR EACH ROW EXECUTE PROCEDURE trg_insert_row_in_tbl2();