запись таблиц в Postgresql с использованием rPostgreSQL, когда имя базы данных состоит из заглавных букв - PullRequest
8 голосов
/ 19 сентября 2011

У меня есть база данных в PostgreSQL, которая называется DATA во всех заглавных буквах. Когда я пытаюсь записать R data.frame в эту базу данных, используя RPostgreSQL, примерно так:

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

Я получаю следующую ошибку:

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

Однако я замечаю, что если я перехожу в Postgresql и изменяю имя базы данных на data (нижний регистр), а затем изменяю сценарий на вызов dbname="data", тогда он работает как чудо.

Я просмотрел документацию по rPostgreSQL, и единственное упоминание о регистре, которое я видел, касалось имен полей с учетом регистра.

Итак, мои вопросы:

  1. Ожидается ли такое поведение?
  2. В моей ситуации я управляю БД, чтобы я мог переименовать базу данных по своему желанию. Как бы мне обойти это поведение, если бы я не мог переименовать базу данных в нижний регистр?

1 Ответ

8 голосов
/ 19 сентября 2011

Определенно были проблемы с таблицами в верхнем регистре. Думаю, мы справимся с этим сейчас: Попробуйте процитировать его как «ДАННЫЕ», и оно должно пройти. Идентификатор таблицы без кавычек все получают в нижнем регистре.

Ваша проблема заключается в наличии всей базы данных в верхнем регистре. Он также может работать с кавычками, возможно даже с '\"DATA\"' в качестве аргумента dbConnect.

В противном случае воспроизводимые примеры из списка являются лучшими, и, если повезет, Томоаки найдет решение вашей проблемы.

О, и мы пишем это как пакет: RPostgreSQL с большой буквы, особенно сегодня, когда речь идет о пиратском дне.

Редактировать: Похоже, что с текущими версиями в Ubuntu 11.04 просто нет проблем:

Сначала создайте DATA

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

DATA=# \q
edd@max:~$ 

Во-вторых, в 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> 

В-третьих, проверьте содержимое в 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=# 

Хорошо выглядишь для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...