sql >> Base de Datos >  >> RDS >> Mysql

Usar libpqxx para almacenar datos a granel O cómo usar la instrucción COPY en libpqxx

El pushLog La función confirma cada inserción por separado y la confirmación es lenta.

Como se explica en la documentación Popular una base de datos :

También:

Sin embargo, en su caso, eso sería un problema más que un beneficio, porque cada INSERCIÓN puede fallar en la violación de la clave principal, cancelando así las INSERCIONES anteriores desde la última confirmación. Tenga en cuenta que esto también sería un problema con COPY , deberías usar eso.

Dado que es realmente necesario agrupar consultas en transacciones para el rendimiento, debe tratar las infracciones de la clave principal de una manera que no anule la transacción.

Normalmente se utilizan dos métodos:

  1. Evite el error:INSERT INTO... WHERE NOT EXISTS (SELECT 1 FROM table WHERE primary_key=...)

  2. Atrape el error insertando dentro de una función plpgsql que tiene un bloque de EXCEPCIÓN que ignora itr. Los INSERTOS específicos que causan un duplicado se cancelarán, pero la transacción no se anulará.

Si tiene inserciones simultáneas, estos métodos deben refinarse con una estrategia de bloqueo.