sql >> Database >  >> RDS >> Mysql

libpqxx gebruiken om gegevens in bulk op te slaan OF hoe de COPY-instructie te gebruiken in libpqxx

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:

  1. Vermijd de fout:INSERT INTO... WHERE NOT EXISTS (SELECT 1 FROM table WHERE primary_key=...)

  2. 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.




  1. MySQL-query om rijen te retourneren die witruimte bevatten

  2. MySQL Table bestaat niet fout, maar het bestaat wel

  3. Rails + MySQL op Mavericks - Bibliotheek niet geladen:libmysqlclient.18.dylib

  4. Waarom vertraagt ​​de hogere LIMIT-offset van MYSQL de query?