Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Usando libpqxx para armazenar dados em massa OU como usar a instrução COPY em libpqxx


O pushLog A função confirma cada inserção separadamente e a confirmação é lenta.

Conforme explicado na documentação Populando um banco de dados :

Também:

No seu caso, no entanto, isso seria um problema e não um benefício, porque cada INSERT pode falhar na violação de chave primária, cancelando os INSERTs anteriores desde o último commit. Observe que isso também seria um problema com COPY , você deve usar isso.

Como é realmente necessário agrupar consultas em transações para desempenho, você precisa lidar com violações de chave primária de uma forma que não anule a transação.

Dois métodos são normalmente usados:

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

  2. Capturar o erro inserindo dentro de uma função plpgsql que possui um bloco EXCEPTION ignorando itr. O(s) INSERT(s) específico(s) causando uma duplicata será(ão) cancelado(s), mas a transação não será abortada.

Se você tiver inserções simultâneas, esses métodos precisam ser refinados com uma estratégia de bloqueio.