DEFAULT akan bekerja untuk SERIAL karena menetapkan nilai default untuk kolom. Jadi
INSERT INTO Purchase VALUES (DEFAULT,'Lendl');
harus bekerja. Tapi PurchasedItem.purchaseID tidak memiliki nilai default yang ditetapkan, jadi ia mencoba memasukkan NULL (dan null belum ada di kolom referensi), jadi gagal.
coba:
INSERT INTO Purchase(custName) VALUES ('Lendl') RETURNING purchaseID;
Anda akan melihat nilai yang dimasukkan purchaseID , gunakan dalam kueri berikutnya:
INSERT INTO PurchasedItem(purchaseID, itemNo) VALUES (_the_value_above_, 111);
commit;
Jika Anda ingin digunakan tanpa interaktivitas, gunakan DO blokir dengan returning purchaseID into _value
perbarui :
atau cte, seperti
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