DEFAULT
funcionará para SERIAL
ya que establece el valor predeterminado para la columna. Entonces
INSERT INTO Purchase VALUES (DEFAULT,'Lendl');
Deberia trabajar. Pero PurchasedItem.purchaseID
no tiene un valor predeterminado establecido, por lo que intenta insertar NULL
(y nulo aún no está en la columna a la que se hace referencia), por lo que falla.
prueba:
INSERT INTO Purchase(custName) VALUES ('Lendl') RETURNING purchaseID;
verá el valor de purchaseID
insertado , utilícelo en la siguiente consulta:
INSERT INTO PurchasedItem(purchaseID, itemNo) VALUES (_the_value_above_, 111);
commit;
Si desea que se use sin interactividad, use DO
bloquear con returning purchaseID into _value
actualizar :
o cte, algo 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