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

Postgres non restituisce lastval() correttamente

La versione breve qui è quella che utilizza lastval non qualificato è una cattiva idea. Trigger, regole, ecc. possono causare problemi.

Dovresti evitare lastval interamente. Usa:

BEGIN;

INSERT INTO "users" ("email", "first_name", "last_name", "password", "objectstate_id", "activate_rid") 
VALUES ('[email protected]', 'Xpress', 'Care', 'f9fecdd84ee071806423adf30d6d6ff04e1a0a2c6688f2c057ddbab1d6b55d02', 4, 'EMQHTMMvViAB5BdYj0E6') 
RETURNING id;

dove id dovrebbe dal nome della colonna chiave generata.

Questo approccio gestirà gli inserimenti multivalore e INSERT INTO ... SELECT ... correttamente e non avrà problemi con i trigger che toccano le sequenze.

Se devi utilizzare un approccio basato su chiamate di funzione, usa almeno currval('tablename_id_seq') (passando il nome della sequenza appropriato) invece di lastval .