DEFAULT
będzie działać dla SERIAL
ponieważ ustawia domyślną wartość dla kolumny. Więc
INSERT INTO Purchase VALUES (DEFAULT,'Lendl');
powinno działać. Ale PurchasedItem.purchaseID
nie ma ustawionej wartości domyślnej, więc próbuje wstawić NULL
(i wartość null nie jest jeszcze w kolumnie, do której istnieje odwołanie), więc kończy się niepowodzeniem.
spróbuj:
INSERT INTO Purchase(custName) VALUES ('Lendl') RETURNING purchaseID;
zobaczysz wartość wstawionego purchaseID
, użyj go w następnym zapytaniu:
INSERT INTO PurchasedItem(purchaseID, itemNo) VALUES (_the_value_above_, 111);
commit;
Jeśli chcesz, aby był używany bez interaktywności, użyj DO
blok z returning purchaseID into _value
aktualizacja :
lub cte, coś takiego
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