PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Postgres gibt lastval() nicht richtig zurück

Die Kurzversion hier ist die mit unqualifiziertem lastval ist eine schlechte Idee. Auslöser, Regeln usw. können Probleme verursachen.

Sie sollten lastval vermeiden völlig. Verwendung:

BEGIN;

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

wobei id sollte der Name der generierten Schlüsselspalte sein.

Dieser Ansatz behandelt mehrwertige Einfügungen und INSERT INTO ... SELECT ... korrekt und hat keine Probleme mit Triggern, die Sequenzen berühren.

Wenn Sie einen auf Funktionsaufrufen basierenden Ansatz verwenden müssen, verwenden Sie zumindest currval('tablename_id_seq') (Übergabe des entsprechenden Sequenznamens) anstelle von lastval .