2013-10-19 16 views
33

computer: Mac OS X, versione 10.8 Database: PostgresPostgres ERRORE: Impossibile aprire il file per la lettura: Autorizzazione negata

tentando di importare il file CSV in Postgres.

pg> copy items_ordered from '/users/darchcruise/desktop/items_ordered.csv' with CSV; 
ERROR: could not open file "https://stackoverflow.com/users/darchcruise/desktop/items_ordered.csv" for reading: Permission denied 

Poi ho provato

$> chown postgres /users/darchcruise/desktop/items_ordered.csv 
chown: /users/darchcruise/desktop/items_ordered.csv: Operation not permitted 

Infine, ho provato

$> ls -l 
-rw-r--r-- 1 darchcruise staff  1016 Oct 18 21:04 items_ordered.csv 

Ogni aiuto è molto apprezzato!

risposta

11
chmod a+rX /users/darchcruise/ /users/darchcruise/desktop /users/darchcruise/desktop/items_ordered.csv 

Questo cambierà i diritti di accesso per la cartella. Nota che tutti saranno in grado di leggere il tuo file. Non è possibile utilizzare chown come utente senza diritti amministrativi. Considerare anche l'apprendimento umask per facilitare la creazione di file condivisi.

+0

Ciao, una piccola fodera che farebbe questo compito per te: a = 'pwd'; NumOfSlashes = $ (('echo $ a | sed' s/[^ /] // g '| wc -c '- 1)); for ((i = 1; i <= $ NumOfSlashes; i ++)); fai chmod a + rX $ a; a = 'dirname $ a'; fatto; – Roy

82

Assumendo lo strumento da riga di comando psql, è possibile utilizzare \copy anziché copy.

\copy apre il file e alimenta i contenuti al server, mentre copy dice il server aperto il file stesso e leggerlo, che può essere problematico il permesso-saggio, o addirittura impossibile se client e server eseguito su diverse macchine con nessuna condivisione di file in mezzo.

Sotto il cofano, \copy è implementato come COPY FROM stdin e accetta le stesse opzioni rispetto al lato server COPY.

-3

Può essere che si usi pgadmin collegando l'host remoto, quindi U sta cercando di aggiornarsi dal proprio sistema ma cerca quel file nel file system del sistema remoto ... è l'errore che ho dovuto affrontare Potrebbe essere anche per voi a controllare

30

Copiare il file CSV per/tmp

per me questo ha risolto il problema.

2

Un altro modo per fare ciò, se si dispone di pgAdmin e si sta comodi utilizzando la GUI è di andare nella tabella nello schema e fare clic con il tasto destro del mouse sulla tabella in cui si desidera importare il file e selezionare "Importa" sfoglia il computer per il file, selezionare il tipo di file, le colonne in cui si desidera inserire i dati e quindi selezionare l'importazione.

che è stato fatto utilizzando pgAdmin III e la versione 9.4 di PostgreSQL

5

ho avuto il problema quando stavo cercando di esportare i dati da un server remoto nel disco locale. Non mi ero reso conto che SQL copy è effettivamente eseguito sul server e che tenta di scrivere su una cartella del server. Invece la cosa corretta da fare era usare \copy che è il comando psql e scrive sul file system locale come mi aspettavo. http://www.postgresql.org/message-id/[email protected]om

Forse potrebbe essere utile anche a qualcun altro.

0

Per me ha funzionato semplicemente per aggiungere sudo (o eseguito come root) per il comando chown: postgres

sudo chown/utenti/darchcruise/desktop/items_ordered.csv

1

Copiare il file CSV nella cartella/tmp

dei file con nome in un comando di copia sono letti o scritti direttamente dal server, non per l'applicazione client. Pertanto, devono risiedere o essere accessibili alla macchina del server del database, non al client. Devono essere accessibili, leggibili o scrivibili dall'utente PostgreSQL (l'ID utente sul quale viene eseguito il server), non il client. La COPY che nomina un file è consentita solo ai superutenti del database, poiché consente di leggere o scrivere qualsiasi file a cui il server ha i privilegi per accedere.

Problemi correlati