De pushLog
functie begaat elke invoeging afzonderlijk en de vastlegging is traag.
Zoals uitgelegd in de documentatie Een database vullen :
Ook:
In jouw geval zou dat echter eerder een probleem dan een voordeel zijn, omdat elke INSERT kan mislukken bij schending van de primaire sleutel, waardoor de vorige INSERT's sinds de laatste vastlegging worden geannuleerd. Merk op dat dit ook een probleem zou zijn met COPY
, zou je dat moeten gebruiken.
Aangezien het echt noodzakelijk is om zoekopdrachten in transacties te groeperen voor prestaties, moet u de schendingen van de primaire sleutel zo aanpakken dat de transactie niet wordt afgebroken.
Er worden doorgaans twee methoden gebruikt:
-
Vermijd de fout:
INSERT INTO... WHERE NOT EXISTS (SELECT 1 FROM table WHERE primary_key=...)
-
Val de fout op door een plpgsql-functie in te voegen met een UITZONDERING-blok dat itr negeert. De specifieke INSERT('s) die een duplicaat veroorzaken, worden geannuleerd, maar de transactie wordt niet afgebroken.
Als u gelijktijdige invoegingen heeft, moeten deze methoden worden verfijnd met een vergrendelingsstrategie.