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;
où 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
.