R;如何解决 "expired PostgreSQLConnection" 错误?

R; how to solve an "expired PostgreSQLConnection" error?

我有一个包含 R 代码的文件,它构建了几个数据帧,接下来尝试将它们存储到 Postgres 数据库中。这通常会失败,失败的代码片段如下。

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 ()) 时,连接数每次都会增加一个,调用 dbDisconnect (con) 不会减少这个数字。

我之前尝试从 .Profile 文件创建驱动程序时遇到此错误,我可以通过删除 drv 变量并重新分配来解决此问题。我已成功创建此 table 两次,但我无法重建发生这种情况的原因。有谁知道我做错了什么?

我注意到的一件事是,当我开始采购我的试验时,我开始遇到这个错误。当开始寻找源时,我犯了很多错误,我注意到在 Postgres 状态屏幕上这些连接仍然打开。使用后我仔细尝试 disConnect 所有连接。在这方面使用 tryCatch 块非常有用。使用 finally 分支关闭连接,卸载驱动程序并删除它们的变量。当您关闭来自 Postgres 的连接时,R 仍然认为它们是打开的,并且会在打开 16 个连接后拒绝任何连接尝试。 dbListConnections (PostgreSQL ()) returns 一个列表,disConnect 该列表的所有元素。

起初这不起作用,我尝试删除包 "RPostgreSQL" 但那也不起作用。我不得不从图书馆手动杀死它。因为我是 R 和 Postgres 的新手,所以我怀疑我在安装过程中做错了什么。无论如何,删除并重新安装软件包。接下来重新启动 Postgres 服务器。之后它起作用了。

我同意有点偏执,但在失眠之后我不想冒险 :-) 如果有人能更准确地指出问题的原因,我会很乐意选择他的答案作为正确一个。