Предполагая, что:
1) вы используете postgresql 9.1
2) B.id является последовательным (поэтому на самом деле int со значением по умолчанию nextval ('b_id_seq')
3) при вставке в B вы фактически добавляете другие поля из A, иначе вставка бесполезна
... Я думаю, что-то вроде этого будет работать:
with n as (select nextval('b_id_seq') as newbid,a.id as a_id from a),
l as (insert into b(id) select newbid from n returning id as b_id)
update a set b_id=l.b_id from l,n where a.id=n.a_id and l.b_id=n.newbid;