sql >> Databasteknik >  >> RDS >> PostgreSQL

Postgres returnerar inte lastval() korrekt

Den korta versionen här är att använda okvalificerad lastval är en dålig idé. Triggers, regler etc kan orsaka problem.

Du bör undvika lastval helt. Använd:

BEGIN;

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

där id bör efter namnet på den genererade nyckelkolumnen.

Detta tillvägagångssätt kommer att hantera infogningar med flera värden och INSERT INTO ... SELECT ... korrekt och kommer inte att ha problem med utlösare som rör vid sekvenser.

Om du måste använda en funktionsanropsbaserad metod, använd åtminstone currval('tablename_id_seq') (passar lämpligt sekvensnamn) istället för lastval .




  1. sql:DELETE + INSERT vs UPDATE + INSERT

  2. Hur man beräknar omsättningen varje termin

  3. Hur hittar man en post efter id och väljer några kolumner, ruby ​​on rails?

  4. hur man optimerar den här frågan (4 mm tabeller involverade)