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

Inserção em massa do SQLAlchemy Core lenta


Fiquei chateado quando vi que isso não tinha uma resposta... Encontrei exatamente o mesmo problema outro dia:Tentando inserir em massa cerca de milhões de linhas em uma instância do Postgres RDS usando CORE. Estava demorando horas .

Como solução alternativa, acabei escrevendo meu próprio script de inserção em massa que gerou o próprio sql bruto:
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))
)

Embora feio, isso me deu o desempenho que precisávamos (~ 500.000 linhas/minuto)

Você encontrou uma solução baseada em CORE? Se não, espero que isso ajude!

ATUALIZAÇÃO:Acabei movendo meu script antigo para uma instância sobressalente do EC2 que não estávamos usando, o que realmente corrigiu o problema de desempenho lento. Não tenho certeza de qual é sua configuração, mas aparentemente há uma sobrecarga de rede na comunicação com o RDS de uma conexão externa (não AWS).