2011-09-19 6 views
7

Ho un database in PostgreSQL che prende il nome DATA in tutte le protezioni. Quando cerco di scrivere un data.frame R per questo database con RPostgreSQL in questo modo:scrittoi a PostgreSQL utilizzando rPostgreSQL quando il nome del database è tutte le lettere maiuscole

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

ottengo il seguente errore:

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

Tuttavia ho notato che se vado a PostgreSQL e cambiare il database name a data (minuscolo) e quindi modificare lo script per chiamare dbname="data" quindi funziona come un fascino.

ho guardato attraverso la documentazione per rPostgreSQL e l'unica menzione del caso ho visto aveva a che fare con i nomi dei campi che sono maiuscole e minuscole.

Quindi le mie domande sono:

  1. IS è previsto questo comportamento?
  2. Nella mia situazione ho controllare il DB in modo da posso rinominare il database a volontà. Come potrei aggirare questo comportamento se non potessi rinominare il database in minuscolo?

risposta

6

Ci sono stati sicuramente problemi con tabelle in maiuscolo. Pensiamo che ora lo gestiamo: Provate a citare come "DATI" e dovrebbe passare. Tutti gli identificatori di tabelle non quotate vengono tutti ridotte.

Il tuo problema è avere l'intero database in maiuscolo. Potrebbe anche funzionare con la citazione, forse anche con '\"DATA\"' come argomento per dbConnect.

In caso contrario, gli esempi riproducibili sulla lista sono i migliori, e con un po 'di fortuna, Tomoaki troverà una soluzione per il vostro problema.

Oh, e noi scriverlo come il pacchetto: RPostgreSQL con arrrrrrr capitale, soprattutto oggi nei talk Like a Pirate Day.

Edit: Sembra che semplicemente non c'è problema con le versioni attuali su Ubuntu 11.04:

In primo luogo, creare DATA

[email protected]:~$ createdb DATA 
[email protected]:~$ psql DATA 
psql (8.4.8) 
Type "help" for help. 

DATA=# \q 
[email protected]:~$ 

In secondo luogo, e in R, connettere e risparmiare un po 'di dati:

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> 

In terzo luogo, verificare il contenuto in 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=# 

Guardarmi bene.

+0

'\ "DATA \"' sembra promettente. Lo proverò tra un po '. Grazie, come sempre, per la risposta super veloce. –

+0

Sto eseguendo una versione di rPostgreSQL che ho creato su Mac OS 10.7. È possibile che abbia creato una versione precedente. Costruirò dall'ultima fonte e test. –

+0

@ Dirk Eddelbuettel: la tabella dbwrite è molto chiara grazie. Ho una piccola domanda riguardante l'inserimento di dataframe in una tabella (database). Ho una tabella con il nome "bank1" e contiene già alcuni dati.Ho un dataframe in R con nome "df1" che contiene gli stessi dati (nessun numero simile di colonne e nomi di colonne). Ora voglio aggiornare bank1 con df1. potresti dirmi come posso farlo? – Chanti

Problemi correlati