PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Beim INSERT in eine Tabelle INSERT Daten in verbundenen Tabellen

pgAdmin ist nur die GUI. Sie meinen PostgreSQL , das RDBMS .

Eine Fremdschlüsseleinschränkung , wie Sie haben, erzwingt nur, dass kein Wert verwendet werden kann, der nicht in der referenzierten Spalte vorhanden ist. Sie können ON UPDATE CASCADE verwenden oder ON DELETE CASCADE um Änderungen aus der referenzierten Spalte zu propagieren, aber Sie können keine neuen Zeilen erstellen damit wie du es beschreibst. Sie haben das falsche Werkzeug.

Was Sie beschreiben, könnte mit einem Trigger erreicht werden . Ein anderer, komplexerer Weg wäre eine RULE . Gehen Sie hier mit einem Trigger.

In PostgreSQL benötigen Sie eine Trigger-Funktion , meistens mit plpgsql , und einen Trigger auf einem Tisch, der davon Gebrauch macht.

Etwas wie:

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;

Und einen Trigger AFTER INSERT auf tbl1 :

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