È necessaria un'espressione di tabella comune per questo tipo di concatenamento di inserti:
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));
Un'altra opzione è usare semplicemente lastval()
funzione per fare riferimento all'ultimo valore di sequenza generato:
INSERT INTO tbl_b (status) VALUES ('OK');
INSERT INTO tbl_a (name, tbl_b_reference)
VALUES ('myName', lastval());
Nota che non devi avere altre istruzioni che generano valori di sequenza tra queste due.
Oppure usa la funzione 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'
è il nome standard che Postgres usa per una sequenza creata per un serial
colonna: