I'm new to PostgreSQL (and even Stackoverflow).
Say, I have two tables Order
and Delivery
:
Order
id product address delivery_id
--------------------------------------------------
1 apple mac street (null)
3 coffee java island (null)
4 window micro street (null)
Delivery
id address
----------------
Delivery.id
and Order.id
are auto-incrementing serial columns.
The table Delivery
is currently empty.
I would like to move Order.address
to Delivery.address
and its Delivery.id
to Order.delivery_id
to arrive at this state:
Order
id product address delivery_id
--------------------------------------------------
1 apple mac street 1
5 coffee java island 2
7 window micro street 3
Delivery
id address
---------------------
1 mac street
2 java island
3 micro street
I'll then remove Order.address
.
I found a similar question for Oracle but failed to convert it to PostgreSQL:
I still think it should be possible to use a plain SQL statement with the RETURNING
clause and a following INSERT
in Postgres.
I tried this (as well as some variants):
WITH ids AS (
INSERT INTO Delivery (address)
SELECT address
FROM Order
RETURNING Delivery.id AS d_id, Order.id AS o_id
)
UPDATE Order
SET Delivery_id = d_id
FROM ids
WHERE Order.id = ids.o_id;
This latest attempt failed with:
ERROR: missing FROM-clause entry for table "Delivery" LINE 1: ...address Order RETURNING Delivery.id...
How to do this properly?