PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

SQLAlchemy Core insertion en masse lente

J'ai été déçu quand j'ai vu que cela n'avait pas de réponse... J'ai rencontré exactement le même problème l'autre jour :Essayer d'insérer en bloc environ des millions de lignes dans une instance RDS Postgres en utilisant CORE. Cela prenait heures .

Pour contourner le problème, j'ai fini par écrire mon propre script d'insertion en bloc qui a généré le sql brut lui-même :

bulk_insert_str = []
for entry in entry_list:
    val_str = "('{}', '{}', ...)".format(entry["column1"], entry["column2"], ...)
    bulk_insert_str.append(val_str)

engine.execute(
    """
    INSERT INTO my_table (column1, column2 ...)
    VALUES {}
    """.format(",".join(bulk_insert_str))
)

Bien que moche, cela m'a donné les performances dont nous avions besoin (~ 500 000 lignes/minute)

Avez-vous trouvé une solution basée sur CORE ? Sinon, j'espère que cela vous aidera !

MISE À JOUR :J'ai fini par déplacer mon ancien script dans une instance EC2 de rechange que nous n'utilisions pas, ce qui a en fait résolu le problème de ralentissement des performances. Vous ne savez pas quelle est votre configuration, mais apparemment, il y a une surcharge réseau lors de la communication avec RDS à partir d'une connexion externe (non AWS).