Il file CSV di importazione PostgreSQL causa un errore di sintassi


8

Sto tentando di importare un file CSV in un database tramite il comando "COPIA"; tuttavia, viene visualizzato l'errore (quello che sembra comune) di cui ho bisogno per essere un superutente e che invece dovrei usare "\ copy". Tuttavia, quando utilizzo \ copy, ottengo un errore di sintassi:

ERROR:  syntax error at or near "\"
LINE 1: \copy

Con il cursore che punta a "\". Ecco la mia domanda:

\copy tablename(column2, column3, column4, column5) from '/home/uploads/data.csv' WITH DELIMITER ',' CSV HEADER'

Ho provato sia "copia" che "\ copia". Il primo mi dà un errore di superutente, il secondo mi dà quell'errore di sintassi. Qualche idea su come risolverlo? fallo funzionare?

Sto eseguendo il comando tramite il campo di input sql di myPgAdmin.

L'unica altra domanda che ho riguarda l'importazione delle colonne tramite tablename (colonna2, colonna3 e così via. È la sintassi corretta per questo?

Risposte:


8

\copyè un comando psql (commandline). E ' non è un comando regolare SQL.

Dovrai invece utilizzare COPIA (ma ciò richiede che il file sia presente sul server di database)


Come importereste i file CSV direttamente tramite SQL anziché utilizzare una riga di comando?
Antjanus,

1
@antjanus: useresti il ​​comando COPY come ho già detto (e adam ha spiegato in dettaglio)
a_horse_with_no_name

di nuovo, ciò richiede autorizzazioni da superutente e non è sicuro, giusto?
antjanus,

4

Fare riferimento al manuale di Postgres per COPY .

In pgAdmin (o la stringa sql che passi attraverso uno script o altra connessione db) useresti semplicemente COPY senza prefisso "\".

quindi inserisci qualcosa del tipo: COPY tablename....

Devi assicurarti di disporre dei privilegi necessari per eseguire il comando, quindi in questo caso devi essere in grado di accedere al database e avere accesso in scrittura a 'tablename'. Postgres deve anche essere in grado di raggiungere il file, quindi il percorso / home / upload / dovrebbe essere accessibile sul server di database e l'utente di postgres dovrebbe essere in grado di leggere il file - controlla le autorizzazioni per il file e la directory.


2

Sul mio sistema 9.1 l'errore che ottengo è piuttosto informativo:

or_examples=> copy comp_table_test from '/tmp/test';
ERROR:  must be superuser to COPY to or from a file
HINT:  Anyone can COPY to stdout or from stdin. psql's \copy command also works for anyone.

Se rileggi attentamente il suggerimento, nota che puoi copiare da stdin. Questo è ciò che \ copy in psql fa effettivamente nel back-end. Consulta i documenti su http://www.postgresql.org/docs/8.3/static/sql-copy.html per ulteriori informazioni.

Puoi quindi inserire il corpo della copia nella tua query o almeno così funziona in psql.


1
copy coordina from '/tmp/filename.txt' WITH NULL AS ;

È così che lo faccio in pgAdmin3. Ma controlla attentamente i segnalibri, a volte i diritti sono il problema. (postgres utente su nomefile.txt / chmod 777)


devi essere un superutente db per farlo anche se da qui il reclamo originale.
Chris Travers,

0

Un altro metodo è quello di creare una vista per la query sql. Quindi utilizzare il comando \ copy.


2
Una maggiore esposizione sarebbe di grande aiuto.
Michael Green,

In che modo una vista aiuta durante l' importazione dei dati?
a_horse_with_no_name
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.