この種の挿入チェーンには、共通のテーブル式が必要です。
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));
もう1つのオプションは、単にlastval()
を使用することです。 最後に生成されたシーケンス値を参照する関数:
INSERT INTO tbl_b (status) VALUES ('OK');
INSERT INTO tbl_a (name, tbl_b_reference)
VALUES ('myName', lastval());
これら2つの間のシーケンス値を生成する他のステートメントがあってはならないことに注意してください。
または、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
用に作成されたシーケンスに使用する標準名です。 列: