当数据库名称全是大写字母时,使用rPostgreSQL将表写入Postgresql

JD *_*ong 8 postgresql r

我在PostgreSQL中有一个数据库,它以DATA全部大写字母命名.当我尝试使用RPostgreSQL将R data.frame写入此数据库时,如下所示:

library(RPostgreSQL)
con <- dbConnect(PostgreSQL(), host="myhost", 
                 user= "postgres", password="myPass", dbname="DATA")
dbWriteTable(con, "test", myDf)
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Error in postgresqlExecStatement(conn, statement, ...) : 
  RS-DBI driver: (could not Retrieve the result : ERROR:  no schema has been selected to create in
)
[1] FALSE
Run Code Online (Sandbox Code Playgroud)

但是我注意到,如果我转到Postgresql并将数据库名称更改为data(小写)然后更改脚本以调用dbname="data"它然后它就像一个魅力.

我查看了rPostgreSQL的文档,并且我看到的唯一提到的情况与字段名称区分大小写有关.

所以我的问题是:

  1. 这种行为是预期的吗?
  2. 在我的情况下,我控制数据库,以便我可以随意重命名数据库.如果我无法将数据库重命名为全部小写,我将如何解决此问题?

Dir*_*tel 8

大写的肯定存在问题.我们认为我们现在处理:尝试引用它作为"数据",它应该通过.不带引号的表标识符都是低级的.

您的问题是将整个数据库设为大写.它也可以用于引用,甚至可以'\"DATA\"'作为dbConnect的参数.

否则,列表中可重复的示例是最好的,幸运的是,Tomoaki会找到解决问题的方法.

哦,我们把它拼成一个包:RPostgreSQL和资本arrrrrrr,特别是今天的谈话就像是一个piRate日.

编辑: 看起来Ubuntu 11.04上的当前版本没有问题:

首先,创造 DATA

edd@max:~$ createdb DATA
edd@max:~$ psql DATA
psql (8.4.8)
Type "help" for help.

DATA=# \q
edd@max:~$ 
Run Code Online (Sandbox Code Playgroud)

其次,在R中,连接并保存一些数据:

R> library(RPostgreSQL)
R> con <- dbConnect(PostgreSQL(), host="localhost", user= "edd", 
+                   password=".....", dbname="DATA")
R> con
<PostgreSQLConnection:(21936,0)> 
R> dbWriteTable(con, "quicktest", cars)
[1] TRUE
R> 
Run Code Online (Sandbox Code Playgroud)

三,检查内容DATA:

DATA=# select * from quicktest limit 5;
 row_names | speed | dist 
-----------+-------+------
 1         |     4 |    2
 2         |     4 |   10
 3         |     7 |    4
 4         |     7 |   22
 5         |     8 |   16
(5 rows)

DATA=# 
Run Code Online (Sandbox Code Playgroud)

对我好看.