Você precisa de uma expressão de tabela comum para esse tipo de encadeamento de inserção:
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));
Outra opção é simplesmente usar o
lastval()
função para referenciar o último valor de sequência gerado:INSERT INTO tbl_b (status) VALUES ('OK');
INSERT INTO tbl_a (name, tbl_b_reference)
VALUES ('myName', lastval());
Observe que você não deve ter nenhuma outra instrução que gere valores de sequência entre esses dois.
Ou use a função 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'
é o nome padrão que o Postgres usa para uma sequência que é criada para um serial
coluna: