2015-10-26 15 views
11

Ho un file csv.Come inserire dati csv in db postgresql (db remoto)

È possibile inserire i dati se file e db sono disponibili nello stesso server utilizzando il comando riportato di seguito.

psql -h localhost -d local_mydb -U myuser -c "copy mytable (column1, column2) from '/path/to/local/file.csv' with delimiter as ','" 

Ma file è in server locale ma, db è disponibile in un altro server (remoto)

Se provo a fare per il server remoto, usando sotto il comando

psql -h remotehost -d remote_mydb -U myuser -c "copy mytable (column1, column2) from '/path/to/local/file.csv' with delimiter as ','" 

ottenere il permesso negato eccezione.

Come posso farlo?

risposta

14

\copy (notare il backslash) consente di copiare da/per database remoti e non richiede privilegi di superutente.

psql -h remotehost -d remote_mydb -U myuser -c "\copy mytable (column1, column2) from '/path/to/local/file.csv' with delimiter as ','" 

Se stai usando Java, è possibile utilizzare il CopyManager nel driver JDBC: https://jdbc.postgresql.org/documentation/publicapi/org/postgresql/copy/CopyManager.html

+0

ho provato sopra la vostra e Schwern di. sta funzionando bene (dalla console). ma, mentre provo questo da codice Java, ottenendo l'errore di sintassi "\". – Spike

+0

Nota che ['\ copy' è un comando psql] (http://www.postgresql.org/docs/current/static/app-psql.html#APP-PSQL-META-COMMANDS-COPY). Non funzionerà in altri contesti. – Schwern

12

È possibile alimentare il file tramite STDIN. Dal PostgreSQL COPY documentation ...

quando viene specificato STDIN o STDOUT, i dati vengono trasmessi attraverso la connessione tra il client e il server.

psql -h remotehost -d remote_mydb -U myuser -c \ 
    "copy mytable (column1, column2) from STDIN with delimiter as ','" \ 
    < /path/to/local/file.csv 

ero errato sull'utilizzo FROM PROGRAM. Ha gli stessi avvertimenti di FROM 'filename'. Il server esegue il programma, non il client.

Quando viene specificato PROGRAMMA, il server esegue il comando dato e legge da standard output del programma, o scrive allo standard input del programma. Il comando deve essere specificato dal punto di vista del server ed essere eseguibile dall'utente PostgreSQL.

Problemi correlati