2014-10-12 12 views
10

C'è un modo per forzare la disconnessione di un oggetto in dplyr simile a RPostgreSQL::dbDisconnect?Disconnessione della connessione src_tbls in dplyr

Vedi per esempio:

> src_temp <- src_postgres(dbname = "temp", host = "127.0.0.1", port = 5432, user = "x", password = "y") 
Error in postgresqlNewConnection(drv, ...) : 
    RS-DBI driver: (cannot allocate a new connection -- maximum of 16 connections already opened) 

Come nota a margine, lo fa disconnessione automatica abbastanza rapidamente dopo pochi secondi:

Auto-disconnecting postgres connection (3734, 26) 

dopo il quale è possibile eseguire nuovamente il comando src_postgres.

risposta

9

si può fare:

RPostgreSQL::dbDisconnect(src_temp$con) 

per forzare una disconnessione.

Questo è quello che si chiama il garbage collection da questa funzione in dplyr (attraverso il file dbi-s3.r di origine):

# Creates an environment that disconnects the database when it's 
# garbage collected 
db_disconnector <- function(con, name, quiet = FALSE) { 
    reg.finalizer(environment(), function(...) { 
    if (!quiet) { 
     message("Auto-disconnecting ", name, " connection ", 
     "(", paste([email protected], collapse = ", "), ")") 
    } 
    dbDisconnect(con) 
    }) 
    environment() 
} 
+7

In altre parole, si può semplicemente 'rm()' vecchie connessioni, e se ne vanno via sul prossimo gc. – hadley

+5

Questo non sta accadendo per me: dopo 'rm (list = ls())' Ricevo ancora 'Errore in postgresqlNewConnection (drv, ...): Driver RS-DBI: (p _ non allocare una nuova connessione - massimo 16 connessioni già aperte) 'quando provo ad aprire un nuovo' dplyr :: src_postgres (...) '. – Gabi

+0

@Gabi stesso problema per me, eventuali aggiornamenti? – Dambo

Problemi correlati