Имате нужда от общ табличен израз за този вид верижно вмъкване:
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));
Друг вариант е просто да използвате lastval()
функция за препратка към последната генерирана стойност на последователност:
INSERT INTO tbl_b (status) VALUES ('OK');
INSERT INTO tbl_a (name, tbl_b_reference)
VALUES ('myName', lastval());
Имайте предвид, че не трябва да имате други изрази, които генерират стойности на последователност между тези две.
Или използвайте функцията 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'
е стандартното име, което Postgres използва за последователност, която е създадена за serial
колона: