DEFAULT funcionará para SERIAL pois define o valor padrão para a coluna. Então INSERT INTO Purchase VALUES (DEFAULT,'Lendl');
Deveria trabalhar. Mas
PurchasedItem.purchaseID não tem nenhum valor padrão definido, então ele tenta inserir NULL (e null ainda não está na coluna referenciada), então falha. tentar:
INSERT INTO Purchase(custName) VALUES ('Lendl') RETURNING purchaseID;
você verá o valor de
purchaseID inserido , use-o na próxima consulta:INSERT INTO PurchasedItem(purchaseID, itemNo) VALUES (_the_value_above_, 111);
commit;
Se você quiser que ele seja usado sem interatividade, use
DO bloco com returning purchaseID into _value atualizar :
ou cte, smth como
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