Tengo la tabla x con muchas filas existentes.
x ( id, name)
Tengo una nueva tabla y, que actualmente está vacía (todos los campos tienen valores predeterminados)
y ( id, uuid )
He actualizado x con una nueva columna y_id
x ( id, name, y_id )
Quiero llenar y para cada fila en x, y luego asociar x con y a través de y.id
Esto es lo más cerca que tengo, pero esto establece que todas las filas de x tengan el mismo y.id.
with ys as ( insert into y(uuid) values(default) returning id ) update x set y_id = ys.id from ysDesea completar "y" para cada valor de "x". Pero entonces no tienes una forma de conectar las tablas. Pero . . .
with ys as ( insert into y select -- this is empty on purpose to put in only default values from x; returning id ) update x set y_id = yy.id from (select x.*, row_number() over (order by x_id) as seqnum from x ) xx join (select ys.*, row_number() over (order by y_id) as seqnum from ys ) yy on xx.seqnum = yy.seqnum where x.x_id = xx.x_id; ¿Qué hace esto? El CTE inserta una fila en y con valores predeterminados para cada fila en x . Luego, el insert agrega un número de secuencia a las x y las y para que puedan alinearse, una fila a una fila. A continuación, ese valor se utiliza para la actualización.