psycopg2 copy_from genera un'eccezione ProgrammingError asincrona con la connessione di sincronizzazione nell'attività celery

asynchronous celery psycopg2 python sqlbulkcopy

Domanda

Il mio problema è che sto affrontando

ProgrammingError: copy_from non può essere utilizzato con un callback asincrono.

durante il tentativo di copy_from senza connessione asincrona. Questo deve essere affermato, sto creando la connessione da un compito di sedano. Qualcuno può darmi un indizio su come sqlalchemy o sedano o quant'altro possa comportare la mia connessione psycopg2 come asincrona?

conn = psycopg2.connect(con_string)
conn.async
>>0
cur = conn.cursor()    
data = BytesIO()
data.write('\n'.join(['Tom\tJenkins\t37',
                  'Madonna\t\N\t45',
                  'Federico\tDi Gregorio\t\N']))
data.seek(0)
curs.copy_from(data, 'test_copy')

Risposta popolare

Abbiamo riscontrato questo errore in pgcli; in quel caso si è scoperto che wait_callback stava facendo funzionare la connessione come se fosse asincrona dal punto di vista di psycopg2. Ciò ha aiutato:

from contextlib import contextmanager

@contextmanager
def _paused_thread():
    try:
        thread = psycopg2.extensions.get_wait_callback()
        psycopg2.extensions.set_wait_callback(None)
        yield
    finally:
        psycopg2.extensions.set_wait_callback(thread)

with _paused_thread():
    cursor.copy_expert('copy mytable to STDOUT', file)


Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow