sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo hacer que la clave externa de la tabla secundaria tenga el mismo valor que la clave principal de incremento automático principal

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