2016-09-19 30 views
1

我有一個R代碼的文件,它建立了幾個數據框,然後嘗試將它們存儲到Postgres數據庫中。這通常失敗,失敗的代碼片段如下。R;如何解決「過期的PostgreSQLConnection」錯誤?

require ("RPostgreSQL") 

drv <- dbDriver("PostgreSQL") 
res <- dbConnect (drv, dbname = db, 
      host = "localhost", port = 5432, 
      user = "postgres", password = pw) 

table_name <- "gemeenten" 
print (c ("adding ", table_name)) 
if (dbExistsTable (con, table_name)) dbRemoveTable (con, table_name) ### Error! 
result <- dbWriteTable (con, table_name, gemeenten) 

我得到的錯誤是:

Error in postgresqlQuickSQL(conn, statement, ...) : 
    expired PostgreSQLConnection 

,並在dbExistsTable測試出現錯誤。當我撥打dbListConnections (PostgreSQL())時,每次連接數增加1,呼叫dbDisconnect (con)不會減少此數字。

當我試圖從.Profile文件創建驅動程序之前,我得到了這個錯誤,我可以解決這個問題是刪除drv變量並重新分配它。我在創建這個表格方面成功了兩次,但我無法重建爲什麼發生這種情況。有誰知道我做錯了什麼?

回答

1

我注意到的一件事是,當我開始採購我的試驗時,我開始出現這個錯誤。當開始源代碼時,我犯了很多錯誤,並且我在Postgres狀態屏幕中注意到這些連接保持打開狀態。我仔細地嘗試過disConnect使用後的所有連接。在這方面使用tryCatch塊非常有用。使用finally分支關閉連接,卸載驅動程序並刪除它們的變量。當你關閉Postgres的連接是不夠的時候,R仍然認爲它們是開放的,並且在打開16個連接後將拒絕任何連接嘗試。 dbListConnections (PostgreSQL())返回一個列表,disConnect該列表的所有元素。

這一開始並沒有工作,我試圖刪除包「RPostgreSQL」,但也沒有工作。我不得不從庫中手動殺死它。由於我在Postgres中是R中的新手,我懷疑在安裝過程中出現了錯誤。無論如何,刪除並重新安裝包。接下來重新啓動Postgres服務器。之後,它的工作。

有點偏執我同意,但在失眠了一夜之後,我不想冒任何風險:-)如果有人能更準確地找出問題的原因,我會很樂意選擇他的答案作爲正確的一。