为什么我不能读取我的表,虽然它是由dbListTables列出的?

时间:2012-05-17 18:34:54

标签: r postgresql rpostgresql

我正在尝试使用RPostgreSQL和R v2.14.2将表读入R中 我的RPostgreSQL版本列为0.3-2,已于2012年5月16日下载 我的DBI版本列为0.2-5,已于2012年5月16日下载。

我可以打开数据库,并列出表格。我要打开的表格显然存在,但是,当我尝试阅读它时,我收到一条错误消息。我不确定错误是在我的代码中还是在数据库的设置方式中。

library(RPostgreSQL)  
# Loading required package: DBI  
drv <- dbDriver("PostgreSQL")  
con <- dbConnect(drv, host = 'freda.freda.com', dbname = 'test', user = 'fredak', password = 'xxxx')  

dbListTables(con)  
# [1] "chemistry”                                               
# [2] "ecog”  
# [3] "hematology"                                        

dbExistsTable(con, "ecog")  
# [1] FALSE

MyTable <- dbReadTable(con, "ecog")    
# Error in postgresqlExecStatement(conn, statement, ...) :  
#   RS-DBI driver: (could not Retrieve the result : ERROR:  relation "ecog" does not exist  
# LINE 1: SELECT * from "ecog"  
#                       ^  
# )  
# Error in names(out) <- make.names(names(out), unique = TRUE) :   
#   attempt to set an attribute on NULL  
# In addition: Warning message:  
# In postgresqlQuickSQL(conn, statement, ...) :  
#   Could not create executeSELECT * from "ecog"

3 个答案:

答案 0 :(得分:11)

如果想要与命名模式中的表进行交互,请使用以下(非直观)语法:

dbExistsTable(con, c("schema_name", "table_name"))
[1] TRUE

尽管dbListTables(con)返回所有没有关联模式的表名,但仍可正常工作。

答案 1 :(得分:0)

我怀疑是权限问题。请通过psql或其他地点尝试SQL命令以排除任何后端权限问题。

你的命令在我这里工作正常:

R> library(RPostgreSQL)
Loading required package: DBI
R> drv <- dbDriver("PostgreSQL")
R> con <- dbConnect(drv, dbname="beancounter", user="edd", password="xxxxxx") 
R> dbListTables(con)
[1] "beancounter"   "cash"          "fxprices"      "indices"       "meta"
[6] "portfolio"     "portfoliosold" "stockinfo"     "stockprices"  
R> dbExistsTable(con, "cash")
[1] TRUE
R> dbExistsTable(con, 'cash')
[1] TRUE
R> dbExistsTable(con, 'Cash')
[1] FALSE
R> dbExistsTable(con, "Cash")
[1] FALSE
R> ccc <- dbReadTable(con, "cash")
R> dim(ccc)
[1] 24  7
R> 

答案 2 :(得分:0)

等效的RPostgres语法是

dbExistsTable(con, Id(schema = "schema_name", table = "table_name"))