PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como obter a chave estrangeira da tabela filho para ter o mesmo valor que a chave primária de incremento automático do pai


DEFAULT funcionará para SERIAL pois define o valor padrão para a coluna. Então
INSERT INTO Purchase VALUES (DEFAULT,'Lendl');

Deveria trabalhar. Mas PurchasedItem.purchaseID não tem nenhum valor padrão definido, então ele tenta inserir NULL (e null ainda não está na coluna referenciada), então falha.

tentar:
INSERT INTO Purchase(custName) VALUES ('Lendl') RETURNING purchaseID;

você verá o valor de purchaseID inserido , use-o na próxima consulta:
INSERT INTO PurchasedItem(purchaseID, itemNo) VALUES (_the_value_above_, 111);
commit;

Se você quiser que ele seja usado sem interatividade, use DO bloco com returning purchaseID into _value

atualizar :

ou cte, smth 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