Vous avez besoin d'une expression de table commune pour ce type de chaînage d'insertion :
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));
Une autre option est d'utiliser simplement le lastval()
fonction pour référencer la dernière valeur de séquence générée :
INSERT INTO tbl_b (status) VALUES ('OK');
INSERT INTO tbl_a (name, tbl_b_reference)
VALUES ('myName', lastval());
Notez que vous ne devez pas avoir d'autres instructions qui génèrent des valeurs de séquence entre ces deux.
Ou utilisez la fonction 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'
est le nom standard que Postgres utilise pour une séquence créée pour un serial
colonne :