Вы можете сгенерировать сопоставление перед вставкой:
WITH a_to_b_mapping AS (
SELECT nextval('b_table_id_seq'::regclass) b_id, foo, id AS a_id
FROM a_table
), b_inserts AS (
INSERT INTO b_table (id, bar)
SELECT b_id, foo
FROM a_to_b_mapping
RETURNING id
)
UPDATE a_table a
SET b_id = m.b_id
FROM a_to_b_mapping m
JOIN b_inserts i ON i.id = m.b_id
WHERE a.id = m.a_id
Обратите внимание, что вам нужно присоединиться к b_inserts
в обновлении, чтобы убедиться, что вставка произойдет первой, если у вас есть внешний ключ от a_table.b_id
до b.id
.