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

psycopg2 COPY à l'aide de cursor.copy_from() se fige avec de grandes entrées

Ceci est juste une solution de contournement, mais vous pouvez simplement envoyer quelque chose dans psql. J'utilise parfois cette recette quand je suis trop paresseux pour arrêter 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)

En ce qui concerne votre verrouillage, utilisez-vous plusieurs threads ou quelque chose comme ça ?

Votre postgres enregistre-t-il quelque chose comme une connexion fermée ou un blocage ? Pouvez-vous voir l'activité du disque après son verrouillage ?