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

Postgres returnerer ikke lastval() korrekt

Den korte version her er at bruge ukvalificeret lastval er en dårlig idé. Triggere, regler osv. kan give problemer.

Du bør undgå lastval helt. Brug:

BEGIN;

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

hvor id skal ved navnet på den genererede nøglekolonne.

Denne tilgang vil håndtere inserts med flere værdier og INSERT INTO ... SELECT ... korrekt og vil ikke have problemer med triggere, der berører sekvenser.

Hvis du skal bruge en funktionsopkaldsbaseret tilgang, skal du i det mindste bruge currval('tablename_id_seq') (passer det passende sekvensnavn) i stedet for lastval .




  1. Finde funktionel afhængighed

  2. Advarsel:PDO::exec() forventer, at parameter 1 er streng

  3. Datoforskel mellem to poster i samme tabel

  4. Output SQLite-forespørgselsresultater som en INSERT-sætning