PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Postgres não retornando lastval() corretamente


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 .