在 R 中查询 PostgreSQL 数据库时,如何修复警告消息“关闭打开的结果集,取消先前的查询”?

cnb*_*ger 5 postgresql r dbi rpostgresql

下面是我在 R 中用于从 PostgreSQL 数据库中提取 ID 的代码片段。当我运行该函数时,我从 R 收到以下警告消息:

在 result_create(conn@ptr, statements) 中:关闭打开的结果集,取消之前的查询

options(warn=-1)如何避免出现此警告消息而不在代码开头 使用,抑制警告而不是

con <- dbConnect(RPostgres::Postgres(),
                 user = "postgres",
                 dbname  = "DataBaseName",
                 password  = "123456",
                 port  = 5431)


get_id <- function(connection, table){

  query <- toString(paste("SELECT id FROM ", table, sep = ""))
  data_extract_query <- dbSendQuery(connection, query)
  data_extract <- dbFetch(data_extract_query)
  return(data_extract)
}


get_id(con, "users") 

Run Code Online (Sandbox Code Playgroud)

cnb*_*ger 2

我找到了解决问题的方法。

我在 GitHub 上找到了 RSQLite 的线程https://github.com/r-dbi/RSQLite/issues/143。在这个线程中,他们n = -1dbFetch()函数中显式设置。

这似乎解决了我的问题,并且通过编辑如下代码,警告消息没有再次出现:

data_extract <- dbFetch(data_extract_query, n = -1)

的含义n是查询应返回的行数。通过将此设置为-1将检索所有行。默认情况下,它设置为,n = -1但由于某种原因,在此版本的 R (3.6.3) 中仍会显示警告。

在R中调用?dbFetch你可以看到更多这方面的信息。我添加了 R 帮助页面中的一个片段:

用法

dbFetch(res, n = -1, ...)

fetch(res, n = -1, ...)

论据

res 继承自 DBIResult 的对象,由 dbSendQuery() 创建。

n每次获取要检索的最大记录数。使用 n = -1 或 n = Inf 检索所有待处理记录。某些实现可能会识别其他特殊值。

...其他参数传递给方法。