Puoi usare la lastval()funzione:
Restituisce il valore ottenuto più di recente con nextvalper qualsiasi sequenza
Quindi qualcosa del genere:
INSERT INTO Table1 (name) VALUES ('a_title');
INSERT INTO Table2 (val) VALUES (lastval());
Questo funzionerà bene finché nessuno chiama nextval() su un'altra sequenza (nella sessione corrente) tra i tuoi INSERT.
Come Denis ha notato di seguito e ho avvertito sopra, l'uso lastval()può metterti nei guai se si accede a un'altra sequenza usando nextval()tra i tuoi INSERT. Ciò potrebbe accadere se ci fosse un trigger INSERT su Table1quello chiamato manualmente nextval()su una sequenza o, più probabilmente, se facesse un INSERT su una tabella con una chiave primaria SERIALoBIGSERIAL . Se si vuole essere veramente paranoico (una buona cosa, che in realtà sono di ottenere voi, dopo tutto), allora si potrebbe utilizzare currval(), ma avresti bisogno di conoscere il nome della sequenza in questione:
INSERT INTO Table1 (name) VALUES ('a_title');
INSERT INTO Table2 (val) VALUES (currval('Table1_id_seq'::regclass));
La sequenza generata automaticamente è solitamente denominata t_c_seqdove tè il nome della tabella ed cè il nome della colonna, ma puoi sempre scoprirlo entrando psqle dicendo:
=> \d table_name;
e quindi guardando il valore predefinito per la colonna in questione, ad esempio:
id | integer | not null default nextval('people_id_seq'::regclass)
FYI: lastval()è, più o meno, la versione PostgreSQL di MySQLLAST_INSERT_ID . Lo dico solo perché molte persone hanno più familiarità con MySQL che con PostgreSQL, quindi collegarsi lastval()a qualcosa di familiare potrebbe chiarire le cose.