DEFAULT
ще работи за SERIAL
тъй като задава стойност по подразбиране за колона. И така
INSERT INTO Purchase VALUES (DEFAULT,'Lendl');
трябва да работи. Но PurchasedItem.purchaseID
няма зададена стойност по подразбиране, така че се опитва да вмъкне NULL
(и null все още не е в референтната колона), така че е неуспешно.
опитайте:
INSERT INTO Purchase(custName) VALUES ('Lendl') RETURNING purchaseID;
ще видите стойността на вмъкнатия purchaseID
, използвайте го в следващата заявка:
INSERT INTO PurchasedItem(purchaseID, itemNo) VALUES (_the_value_above_, 111);
commit;
Ако искате да се използва без интерактивност, използвайте DO
блок с returning purchaseID into _value
актуализация :
или cte, нещо като
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