DEFAULT sẽ hoạt động cho SERIAL vì nó đặt giá trị mặc định cho cột. Vì vậy,
INSERT INTO Purchase VALUES (DEFAULT,'Lendl');
nên làm việc. Nhưng PurchasedItem.purchaseID không có giá trị mặc định được đặt, vì vậy nó cố gắng chèn NULL (và null chưa có trong cột được tham chiếu), vì vậy nó không thành công.
thử:
INSERT INTO Purchase(custName) VALUES ('Lendl') RETURNING purchaseID;
bạn sẽ thấy giá trị của purchaseID đã chèn , sử dụng nó trong truy vấn tiếp theo:
INSERT INTO PurchasedItem(purchaseID, itemNo) VALUES (_the_value_above_, 111);
commit;
Nếu bạn muốn nó được sử dụng mà không cần tương tác, hãy sử dụng DO chặn với returning purchaseID into _value
cập nhật :
hoặc cte, smth như
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