PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Postgres inserisce il valore da inserire in un'altra tabella

È necessaria un'espressione di tabella comune per questo tipo di concatenamento di inserti:

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));

Un'altra opzione è usare semplicemente lastval() funzione per fare riferimento all'ultimo valore di sequenza generato:

INSERT INTO tbl_b (status) VALUES ('OK');
INSERT INTO tbl_a (name, tbl_b_reference) 
  VALUES ('myName', lastval());

Nota che non devi avere altre istruzioni che generano valori di sequenza tra queste due.

Oppure usa la funzione 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' è il nome standard che Postgres usa per una sequenza creata per un serial colonna: