2015-05-14 9 views
7

Ho un'applicazione che analizza e carica i dati dai file csv in un database di Postgres 9.3. In esecuzione seriale le istruzioni di inserimento/le esecuzioni del cursore funzionano senza problemi.Errore psycopg2: DatabaseError: errore senza messaggio dalla libpq

Ho aggiunto il sedano nel mix per aggiungere l'analisi parallela e l'inserimento dei file di dati. L'analisi funziona bene. Tuttavia, vado a correre istruzioni di inserimento e ottengo:

[2015-05-13 11:30:16,464: ERROR/Worker-1] ingest_task.work_it: Exception 
    Traceback (most recent call last): 
    File "ingest_tasks.py", line 86, in work_it 
     rowcount = ingest_data.load_data(con=con, statements=statements) 
    File "ingest_data.py", line 134, in load_data 
     ingest_curs.execute(statement) 
    DatabaseError: error with no message from the libpq 

risposta

5

ho incontrato un problema simile quando multiprocessing engine.execute(). Ho risolto questo problema, infine, con la sola aggiunta engine.dispose() destra nella prima riga sotto la funzione in cui si suppone che il sottoprocesso di entrare, come suggerito nella official document:

When a program uses multiprocessing or fork() , and an Engine object is copied to the child process, Engine.dispose() should be called so that the engine creates brand new database connections local to that fork. Database connections generally do not travel across process boundaries.

+0

Esattamente. E ciò avverrà con qualsiasi multiprocesso/lavoratore e impostazione della connessione al database. Generalmente è necessario creare una nuova connessione db in base al processo. – Ross