A versão curta aqui é que usando
lastval
não qualificado é uma má ideia. Gatilhos, regras, etc. podem causar problemas. Você deve evitar
lastval
inteiramente. 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;
onde
id
deve pelo nome da coluna de chave gerada. Essa abordagem lidará com inserções de vários valores e
INSERT INTO ... SELECT ...
corretamente e não terá problemas com gatilhos tocando sequências. Se você deve usar uma abordagem baseada em chamada de função, pelo menos use
currval('tablename_id_seq')
(passando o nome de sequência apropriado) em vez de lastval
.