Necesita una expresión de tabla común para este tipo de encadenamiento de inserción:
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));
Otra opción es simplemente usar lastval()
función para hacer referencia al último valor de secuencia generado:
INSERT INTO tbl_b (status) VALUES ('OK');
INSERT INTO tbl_a (name, tbl_b_reference)
VALUES ('myName', lastval());
Tenga en cuenta que no debe tener ninguna otra declaración que genere valores de secuencia entre esos dos.
O use la función 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'
es el nombre estándar que usa Postgres para una secuencia que se crea para un serial
columna: