PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Postgres wstawia wartość z insertu w innej tabeli

Potrzebujesz wspólnego wyrażenia tabelowego dla tego rodzaju łańcucha wstawiania:

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

Inną opcją jest po prostu użycie lastval() funkcja odwołująca się do ostatnio wygenerowanej wartości sekwencji:

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

Zauważ, że nie możesz mieć żadnych innych instrukcji, które generują wartości sekwencji między tymi dwoma.

Lub użyj funkcji curval():

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' to standardowa nazwa używana przez Postgres dla sekwencji tworzonej dla serial kolumna:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Instalowanie rozszerzenia hstore w testach nosa django

  2. PostgisDialect vs PostgreSQLDialect czy oba?

  3. Okna Postgres działają z grupowaniem agregującym według

  4. PG::ForeignKeyViolation:BŁĄD:aktualizacja lub usunięcie w tabeli xxx narusza ograniczenie klucza obcego

  5. Jak kontener OpenShift może poznać swój identyfikator obrazu?