繁体   English   中英

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

[英]R postgresql - dbWriteTable is not commiting data properly

发现了一种奇怪的行为。 我试图将多个行添加到具有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 ... ),则立即Count测试将按预期工作。

我有一个类似的问题-问题是postgres不处理表名和列名中的大写字母,但是可以使用DBI::dbWriteTable()用大写字母创建表。 实际上,在我的一个生产数据库中,有一个表在psql中显示为\\dt ,但是我无法使用CLI中的drop table语句将其删除(也许我应该尝试在R中摆脱它)! 是一个线程,对此进行了简短的讨论。

解决方案:坚持使用小写字母加下划线而不是驼峰式的字母,这样就可以了。

尝试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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM