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: