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

Postgres-Einfügungswert aus Einfügung in andere Tabelle

Für diese Art der Einfügungsverkettung benötigen Sie einen gemeinsamen Tabellenausdruck:

with ta as (
  INSERT INTO tbl_b (status) VALUES ('OK') 
  RETURNING id
)
INSERT INTO tbl_a (name, tbl_b_reference) 
VALUES ('myName', (select id from ta));

Eine andere Möglichkeit besteht darin, einfach lastval() zu verwenden Funktion, um auf den zuletzt generierten Sequenzwert zu verweisen:

INSERT INTO tbl_b (status) VALUES ('OK');
INSERT INTO tbl_a (name, tbl_b_reference) 
  VALUES ('myName', lastval());

Beachten Sie, dass Sie keine anderen Anweisungen haben dürfen, die Sequenzwerte zwischen diesen beiden generieren.

Oder verwenden Sie die Funktion currval():

INSERT INTO tbl_b (status) VALUES ('OK');
INSERT INTO tbl_a (name, tbl_b_reference) 
  VALUES ('myName', currval('tbl_b_id_seq'));

'tbl_b_id_seq' ist der Standardname, den Postgres für eine Sequenz verwendet, die für eine serial erstellt wird Spalte: