PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Postgres ne renvoie pas lastval() correctement

La version courte ici est que l'utilisation de lastval non qualifié est une mauvaise idée. Les déclencheurs, les règles, etc. peuvent causer des problèmes.

Vous devriez éviter lastval entièrement. Utiliser :

BEGIN;

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

id devrait par le nom de la colonne de clé générée.

Cette approche gérera les insertions à valeurs multiples et INSERT INTO ... SELECT ... correctement, et n'aura pas de problèmes avec les déclencheurs touchant les séquences.

Si vous devez utiliser une approche basée sur l'appel de fonction, utilisez au moins currval('tablename_id_seq') (en passant le nom de séquence approprié) au lieu de lastval .