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 ...
),则立即计数测试按预期工作。
答案 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)