U hebt een algemene tabelexpressie nodig voor dit soort insert-chaining:
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));
Een andere optie is om gewoon de lastval()
. te gebruiken functie om te verwijzen naar de laatst gegenereerde reekswaarde:
INSERT INTO tbl_b (status) VALUES ('OK');
INSERT INTO tbl_a (name, tbl_b_reference)
VALUES ('myName', lastval());
Merk op dat u geen andere instructies mag hebben die reekswaarden tussen deze twee genereren.
Of gebruik de currval() functie:
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'
is de standaardnaam die Postgres gebruikt voor een reeks die is gemaakt voor een serial
kolom: