DEFAULT
funzionerà per SERIAL
poiché imposta il valore predefinito per la colonna. Quindi
INSERT INTO Purchase VALUES (DEFAULT,'Lendl');
dovrebbe funzionare. Ma PurchasedItem.purchaseID
non ha un valore predefinito impostato, quindi tenta di inserire NULL
(e null non è ancora nella colonna referenziata), quindi non riesce.
prova:
INSERT INTO Purchase(custName) VALUES ('Lendl') RETURNING purchaseID;
vedrai il valore di purchaseID
inserito , usalo nella query successiva:
INSERT INTO PurchasedItem(purchaseID, itemNo) VALUES (_the_value_above_, 111);
commit;
Se vuoi che venga utilizzato senza interattività, usa DO
blocca con returning purchaseID into _value
aggiornamento :
o cte, smth come
WITH i AS (
INSERT INTO Purchase(custName, orderedDate)
VALUES ('Lendl', '2016-09-28')
RETURNING purchaseID
)
insert into PurchasedItem
select i.purchaseID,'smth',3
from i