I have table A(id).
I need to
- create table B(id)
- add a foreign key to table A that references to B.id
- for every row in A, insert a row in B and update A.b_id with the newly inserted row in B
Is it possible to do it without adding a temporary column in B that refers to A? The below does work, but I’d rather not have to make a temporary column.
alter table B add column ref_id integer references(A.id);
insert into B (ref_id) select id from A;
update A set b_id = B.id from B where B.ref_id = A.id;
alter table B drop column ref_id;
Assuming that:
1) you’re using postgresql 9.1
2) B.id is a serial (so actually an int with a default value of nextval(‘b_id_seq’)
3) when inserting to B, you actually add other fields from A otherwise the insert is useless
…I think something like this would work: