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