PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

psycopg2 COPY usando cursor.copy_from() si blocca con input di grandi dimensioni

Questa è solo una soluzione alternativa, ma puoi semplicemente inserire qualcosa in psql. Uso questa ricetta a volte quando sono troppo pigro per eliminare psycopg2

import subprocess
def psql_copy_from(filename, tablename, columns = None):
    """Warning, this does not properly quote things"""
    coltxt = ' (%s)' % ', '.join(columns) if columns else ''
    with open(filename) as f:
        subprocess.check_call([
            'psql',
            '-c', 'COPY %s%s FROM STDIN' % (tablename, coltxt),
            '--set=ON_ERROR_STOP=true', # to be safe
            # add your connection args here
        ], stdin=f)

Per quanto riguarda il blocco, stai utilizzando più thread o qualcosa del genere?

Il tuo postgres registra qualcosa come una connessione chiusa o un deadlock? Riesci a vedere l'attività del disco dopo che si è bloccato?