pushLog
funktionen commit varje infogning separat, och commit är långsam.
Som förklaras i dokumentationens Populera en databas :
Även:
I ditt fall skulle det dock vara ett problem snarare än en fördel, eftersom varje INSERT kan misslyckas vid överträdelse av primärnyckeln och därmed avbryta tidigare INSERT sedan den senaste commit. Observera att detta också skulle vara ett problem med COPY , ska du använda det.
Eftersom det verkligen är nödvändigt att gruppera frågor i transaktioner för prestanda, måste du hantera primärnyckelöverträdelser på ett sätt som inte avbryter transaktionen.
Två metoder används vanligtvis:
-
Undvik felet:
INSERT INTO... WHERE NOT EXISTS (VÄLJ 1 FRÅN tabell WHERE primary_key=...)
-
Fånga felet genom att infoga inuti en plpgsql-funktion som har ett EXCEPTION-block som ignorerar itr. Den eller de specifika INFOGARNA som orsakar en dubblett kommer att avbrytas men transaktionen kommer inte att avbrytas.
Om du har samtidiga skär måste dessa metoder förfinas med en låsstrategi.