Du behöver ett vanligt tabelluttryck för denna typ av infogningskedja:
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));
Ett annat alternativ är att helt enkelt använda lastval()
funktion för att referera till det senast genererade sekvensvärdet:
INSERT INTO tbl_b (status) VALUES ('OK');
INSERT INTO tbl_a (name, tbl_b_reference)
VALUES ('myName', lastval());
Observera att du inte får ha några andra satser som genererar sekvensvärden mellan dessa två.
Eller använd 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'
är standardnamnet Postgres använder för en sekvens som skapas för en serial
kolumn: