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: