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

Inserir dados em tabelas vinculadas por chave estrangeira


Você pode fazer isso em uma instrução sql para clientes existentes, 3 instruções para novos. Basta ser otimista e agir como se o cliente já existisse:
insert into "order" (customer_id, price) values \
((select customer_id from customer where name = 'John'), 12.34);

Se o cliente não existir, você receberá uma exceção sql cujo texto será algo como:
null value in column "customer_id" violates not-null constraint

(desde que você tenha tornado customer_id não anulável, o que tenho certeza que você fez). Quando essa exceção ocorrer, insira o cliente na tabela de clientes e refaça a inserção na tabela de pedidos:
insert into customer(name) values ('John');
insert into "order" (customer_id, price) values \
((select customer_id from customer where name = 'John'), 12.34);

A menos que seu negócio esteja crescendo a uma taxa que fará de "onde colocar todo o dinheiro" seu único problema real, a maioria de suas inserções será para clientes existentes. Então, na maioria das vezes, a exceção não ocorrerá e você terminará em uma instrução.