Du skal bruge et fælles tabeludtryk til denne form for indsættelseskæde:
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));
En anden mulighed er blot at bruge lastval()
funktion til at referere til den sidst genererede sekvensværdi:
INSERT INTO tbl_b (status) VALUES ('OK');
INSERT INTO tbl_a (name, tbl_b_reference)
VALUES ('myName', lastval());
Bemærk, at du ikke må have andre udsagn, der genererer sekvensværdier mellem disse to.
Eller brug funktionen 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'
er standardnavnet Postgres bruger for en sekvens, der er oprettet til en serial
kolonne: