2014-10-12 22 views
10

nesnesinin dplyr nesnesinin RPostgreSQL::dbDisconnect benzeri bir bağlantısının kopmasına zorlamanın bir yolu var mı?dplyr içinde src_tbls bağlantısının kesilmesi

örneğin bakınız: Bir yan not olarak

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

, birkaç saniye sonra oldukça hızlı bir şekilde otomatik bağlantı kesme yapar:

Auto-disconnecting postgres connection (3734, 26) 

sonra tekrar src_postgres komutunu çalıştırabilirsiniz.

cevap

9

Sen yapabilirsiniz:

RPostgreSQL::dbDisconnect(src_temp$con) 

bir bağlantı kesme zorlamak için. (dbi-s3.r kaynak dosyası aracılığıyla) dplyr bu işlevinden çöp toplama çağrısında buydu

: Başka bir deyişle

# 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

yapabilirsiniz sadece 'rm()' eski bağlantıları ve elinden gidersiniz sonraki gc'de. – hadley

+5

Bu benim için gerçekleşmiyor: rm'den sonra (liste = ls()) 'PostgresqlNewConnection (drv, ...) 'de hata alıyorum: RS-DBI sürücüsü: (p _ yeni bir bağlantı atamadı - Yeni bir 'dplyr :: src_postgres (...)' açmaya çalıştığımda en fazla 16 bağlantı açıldı). Benim için – Gabi

+0

@ Gabi aynı sorun, herhangi bir güncelleme? – Dambo