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

Postgres insere valor da inserção em outra tabela


Você precisa de uma expressão de tabela comum para esse tipo de encadeamento de inserção:
with ta as (
  INSERT INTO tbl_b (status) VALUES ('OK') 
  RETURNING id
)
INSERT INTO tbl_a (name, tbl_b_reference) 
VALUES ('myName', (select id from ta));

Outra opção é simplesmente usar o lastval() função para referenciar o último valor de sequência gerado:
INSERT INTO tbl_b (status) VALUES ('OK');
INSERT INTO tbl_a (name, tbl_b_reference) 
  VALUES ('myName', lastval());

Observe que você não deve ter nenhuma outra instrução que gere valores de sequência entre esses dois.

Ou use a função currval():
INSERT INTO tbl_b (status) VALUES ('OK');
INSERT INTO tbl_a (name, tbl_b_reference) 
  VALUES ('myName', currval('tbl_b_id_seq'));

'tbl_b_id_seq' é o nome padrão que o Postgres usa para uma sequência que é criada para um serial coluna: