0

发现了一个奇怪的行为。我正在尝试使用 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 ...),那么立即计数测试将按预期工作。

4

2 回答 2

2

我遇到过类似的问题——问题是 postgres 不处理表名和列名中的大写字母,但可以使用DBI::dbWriteTable(). 在我的一个生产数据库中实际上有一个表显示\dt在 psql 中,但我无法使用 CLI 中的 drop table 语句删除它(也许我应该尝试在 R 中删除它)!是一个关于此的简短讨论的线程。

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

于 2015-10-29T21:29:34.513 回答
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)
于 2014-12-29T14:56:00.887 回答