PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Postgres insère la valeur de l'insertion dans une autre table

Vous avez besoin d'une expression de table commune pour ce type de chaînage d'insertion :

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

Une autre option est d'utiliser simplement le lastval() fonction pour référencer la dernière valeur de séquence générée :

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

Notez que vous ne devez pas avoir d'autres instructions qui génèrent des valeurs de séquence entre ces deux.

Ou utilisez la fonction 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' est le nom standard que Postgres utilise pour une séquence créée pour un serial colonne :