sql >> Base de Datos >  >> RDS >> PostgreSQL

Postgres no devuelve lastval() correctamente

La versión corta aquí es usar lastval no calificado es una mala idea Los disparadores, las reglas, etc. pueden causar problemas.

Debes evitar lastval enteramente. Usar:

BEGIN;

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

donde id debe por el nombre de la columna de clave generada.

Este enfoque manejará inserciones de valores múltiples y INSERT INTO ... SELECT ... correctamente, y no tendrá problemas con las secuencias de toque de disparadores.

Si debe usar un enfoque basado en llamadas a funciones, al menos use currval('tablename_id_seq') (pasando el nombre de secuencia apropiado) en lugar de lastval .