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 ('example@sqldat.com', '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 .