PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Su INSERT in una tabella INSERT dati nelle tabelle collegate

pgAdmin è solo la GUI. Intendi PostgreSQL , il RDBMS .

Un vincolo di chiave esterna , come hai solo imposto che nessun valore può essere utilizzato, che non è presente nella colonna di riferimento. Puoi usare ON UPDATE CASCADE o ON DELETE CASCADE per propagare le modifiche dalla colonna di riferimento, ma non puoi creare nuove righe con esso come descrivi tu. Hai sbagliato strumento.

Ciò che descrivi potrebbe essere ottenuto con un trigger . Un altro modo più complesso sarebbe una RULE . Vai con un trigger qui.

In PostgreSQL è necessaria una funzione trigger , principalmente utilizzando plpgsql e un trigger su un tavolo che ne fa uso.

Qualcosa come:

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 un trigger AFTER INSERT su tbl1 :

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