pushLog
funktion commiter hvert insert separat, og commit er langsom.
Som forklaret i dokumentationens Populering af en database :
Også:
I dit tilfælde ville det dog være et problem snarere end en fordel, fordi hver INSERT kan mislykkes ved overtrædelse af primærnøgle, og dermed annullere de tidligere INSERT'er siden sidste commit. Bemærk, at dette også ville være et problem med COPY , skal du bruge det.
Da det virkelig er nødvendigt at gruppere forespørgsler i transaktioner for ydeevne, er du nødt til at håndtere primærnøgleovertrædelser på en måde, der ikke afbryder transaktionen.
To metoder bruges typisk:
-
Undgå fejlen:
INSERT INTO... WHERE NOT EXISTS (SELECT 1 FROM table WHERE primary_key=...)
-
Fang fejlen ved at indsætte en plpgsql-funktion, der har en UNDTAGELSE-blok, der ignorerer itr. De(n) specifikke INSERT(er), der forårsager en duplikat, vil blive annulleret, men transaktionen vil ikke blive afbrudt.
Hvis du har samtidige indsatser, skal disse metoder forfines med en låsestrategi.