R postgresql - dbWriteTable没有正确提交数据

时间:2014-10-31 12:40:51

标签: r postgresql rpostgresql

发现了一种奇怪的行为。我试图将一些行附加到带有R的现有postgresql表中。新行将附加到表中。

dbWriteTable(con,name = "public.MyTab",value = data,row.names=F,overwrite=F, append=T)  

它返回TRUE并且没有错误,因此我认为复制有效。但是,当我在打开的终端(psql)中执行以下命令时:

SELECT count(*) from MyTab;

它返回:

 count 
-------
     0

然后我回到R并测试

dbReadTable(con, "public.MyTab")

正确显示数据。

那发生了什么? Postgres数据库中的数据是否正确?如果我手动插入行(INSERT INTO ...),则立即计数测试按预期工作。

2 个答案:

答案 0 :(得分:2)

我有类似的问题 - 问题是postgres不会处理表格和列名称中的大写字母,但可以使用DBI::dbWriteTable()使用大写创建表格。实际上我的一个生产数据库中有一个表在psql中显示\dt但是我无法通过CLI中的drop table语句删除它(也许我应该尝试去掉它R)! Here是一个简短讨论的主题。

解决方案:坚持使用小写加下划线而不是驼峰表壳,你会没事的。

答案 1 :(得分:0)

试试name=c("public", "MyTab")。还要观察表名的情况(如有必要,请引用)。更多代码如下:

df <- data.frame(name=c("Alice", "Bob"), score=c(95L, 90L))

library(RPostgreSQL)

con <- dbConnect(PostgreSQL())

# Write table using c(schema, table)
dbWriteTable(con, name = c("public", "MyTab"), value = df,
             row.names=FALSE, overwrite=TRUE)

# Works
dbGetQuery(con, "SELECT * FROM \"MyTab\"")

# Doesn't work
dbGetQuery(con, "SELECT * FROM MyTab")
dbDisconnect(con)