PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Por que o psycopg2 INSERT está demorando tanto para ser executado em loop e como faço para acelerá-lo?


Existem várias opções para acelerar a inserção de dados em massa.

1.) commit() após a conclusão do loop:
for ele in coordinates:
    cursor.execute('INSERT INTO gmaps (source_latitude, source_longitude, destination_latitude, destination_longitude) VALUES (%s, %s, %s, %s)', (ele[0], ele[1], ele[2], ele[3])))
conn.commit()

2.) Use os ajudantes de execução rápida do psycopg2 , como execute_batch() or execute_values() .

3.) Concentração de string usando mogrify() :
dataText = ','.join(cur.mogrify('(%s,%s,%s,%s)', row) for ele in coordinates)
cur.execute('INSERT INTO gmaps VALUES ' + dataText)
cur.commit()

Para uma comparação detalhada de INSERT velocidades de execução veja este referência.