2014-10-12 18 views
10

Czy istnieje sposób na wymuszenie odłączenia obiektu src_tbls pod numerem dplyr podobnym do RPostgreSQL::dbDisconnect?Odłączanie połączenia src_tbls w dplyr

Patrz na przykład:

> 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) 

Na marginesie, to nie auto-rozłączanie dość szybko po kilku sekundach:

Auto-disconnecting postgres connection (3734, 26) 

po którym można ponownie uruchomić komendę src_postgres.

Odpowiedz

9

można zrobić:

RPostgreSQL::dbDisconnect(src_temp$con) 

wymusić odłączyć.

To co się nazywa na zbieraniu śmieci z tej funkcji w dplyr (poprzez plik dbi-s3.r źródłowego):

# 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

Innymi słowy, można po prostu 'rm()' starych połączeń, a oni odejść na następnym gc. – hadley

+5

To nie dzieje się dla mnie: po 'rm (list = ls())' nadal otrzymuję 'Błąd w postgresqlNewConnection (drv, ...): Sterownik RS-DBI: (p _ cannot przydziela nowe połączenie - maksymalnie 16 połączeń już otwartych) 'przy próbie otwarcia nowego' dplyr :: src_postgres (...) '. – Gabi

+0

@Gabi ten sam problem dla mnie, jakieś aktualizacje? – Dambo