sql >> Base de Datos >  >> RDS >> PostgreSQL

Postgres inserta el valor de insertar en otra tabla

Necesita una expresión de tabla común para este tipo de encadenamiento de inserción:

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

Otra opción es simplemente usar lastval() función para hacer referencia al último valor de secuencia generado:

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

Tenga en cuenta que no debe tener ninguna otra declaración que genere valores de secuencia entre esos dos.

O use la función 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' es el nombre estándar que usa Postgres para una secuencia que se crea para un serial columna: