Pro tento druh řetězení vložení potřebujete společný tabulkový výraz:
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));
Další možností je jednoduše použít lastval()
funkce odkazující na poslední vygenerovanou sekvenční hodnotu:
INSERT INTO tbl_b (status) VALUES ('OK');
INSERT INTO tbl_a (name, tbl_b_reference)
VALUES ('myName', lastval());
Všimněte si, že nesmíte mít žádné další příkazy, které generují sekvenční hodnoty mezi těmito dvěma.
Nebo použijte funkci 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'
je standardní název, který Postgres používá pro sekvenci, která je vytvořena pro serial
sloupec: