Potrzebujesz wspólnego wyrażenia tabelowego dla tego rodzaju łańcucha wstawiania:
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));
Inną opcją jest po prostu użycie lastval()
funkcja odwołująca się do ostatnio wygenerowanej wartości sekwencji:
INSERT INTO tbl_b (status) VALUES ('OK');
INSERT INTO tbl_a (name, tbl_b_reference)
VALUES ('myName', lastval());
Zauważ, że nie możesz mieć żadnych innych instrukcji, które generują wartości sekwencji między tymi dwoma.
Lub użyj funkcji curval():
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'
to standardowa nazwa używana przez Postgres dla sekwencji tworzonej dla serial
kolumna: