R PostgreSQL-数据库表中的数据未更新

R PostgreSQL-数据库表中的数据未更新,r,postgresql,rpostgresql,R,Postgresql,Rpostgresql,您好,我正在尝试使用RpostgreSQL包更新postgresql表,R中的命令已成功执行,但新数据未反映在数据库中。下面是我在R中执行的命令 for(i in new_data$FIPS) { drv <- dbDriver("PostgreSQL") con <- dbConnect(drv, dbname="ip_platform", host="******", port="5432", user="data_loader", password="******")

您好,我正在尝试使用RpostgreSQL包更新postgresql表,R中的命令已成功执行,但新数据未反映在数据库中。下面是我在R中执行的命令

for(i in new_data$FIPS) {
  drv <- dbDriver("PostgreSQL")
  con <- dbConnect(drv, dbname="ip_platform", host="******", port="5432", user="data_loader", password="******")
  txt <- paste("UPDATE adminvectors.county SET attributes= hstore('usco@TP-TotPop@2010'::TEXT,",new_data$TP.TotPop[new_data$FIPS == i],"::TEXT) where geoid ='",i,"'")
  dbGetQuery(con, txt)
  dbCommit(con)
  dbDisconnect(con)
}
for(新数据$FIPS中的i){

drv您正在调用dbGetQuery而不是dbSendQuery,并且正在断开与for循环中数据库的连接。您还正在为每个循环迭代创建一个新的连接对象,这是不必要的。请尝试以下操作:

drv <- dbDriver("PostgreSQL")
con <- dbConnect(drv, dbname="ip_platform", host="******", port="5432", user="data_loader", password="******")

for(i in new_data$FIPS) {
  txt <- paste("UPDATE adminvectors.county SET attributes= hstore('usco@TP-TotPop@2010'::TEXT,",new_data$TP.TotPop[new_data$FIPS == i],"::TEXT) where geoid ='",i,"'")
  dbSendQuery(con, txt)
}

dbDisconnect(con)

drvSimplify,Simplify,Simplify——RPostgreSQL从一开始(2008年)就已经对这些类型的操作进行了单元测试,这是可行的(除非您有数据库设置问题)


有关所有测试,请参见eg。

感谢您的所有输入。
问题在于我在for循环中使用的paste()函数。由于where条件失败,paste()函数在查询中用空格替换了逗号。我在paste()中添加了sep=”“属性现在查询被正确地发送到数据库,行也按预期得到更新。

不确定它是否会更改任何内容,但您可能希望使用
dbSendQuery
而不是
dbGetQuery
,因为您实际上没有拉取任何内容。此外,您需要在断开连接之前提交。我已经尝试过dbSendQuery同样如此,但仍然存在相同的问题。对于每次迭代,dbCommit都会返回一条警告,说“没有正在进行的事务”@sckott主要抱怨。您对自2008年以来一直在CRAN上的RPostgreSQL到底有什么问题?当我在所有迭代后断开连接时,连接的最大数量已经超过了,这就是我试图为for循环的每个迭代建立和断开连接的原因