Anda memerlukan ekspresi tabel umum untuk jenis insert chaining ini:
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));
Pilihan lain adalah dengan hanya menggunakan lastval() berfungsi untuk mereferensikan nilai urutan yang terakhir dibuat:
INSERT INTO tbl_b (status) VALUES ('OK');
INSERT INTO tbl_a (name, tbl_b_reference)
VALUES ('myName', lastval());
Perhatikan bahwa Anda tidak boleh memiliki pernyataan lain yang menghasilkan nilai urutan di antara keduanya.
Atau gunakan fungsi 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' adalah nama standar yang digunakan Postgres untuk urutan yang dibuat untuk serial kolom: