2012-04-09 11 views
8

Desidero utilizzare la funzione COPY in PostgreSQL per importare un file CSV in un database PostgreSQL.Funzione COPY in PostgreSQL

Dove dice il nome file nello documentation, il file CSV deve essere archiviato in una posizione specifica o può essere archiviato in qualsiasi posizione.

Ad esempio, copy data_table from '/tmp/outputdata.csv' WITH DELIMITER AS ',' CSV QUOTE AS '"';. Dove dice tmp, significa la cartella tmp nell'unità C :. Può essere cambiato in un altro nome di cartella?

risposta

15

Sembra che siete confusi da Linux vs Windows notazione file-path. Quello che hai è un percorso Linux ancorato a root. Windows utilizza lettere di unità, che è possibile specificare altrettanto bene quando si esegue Windows.

Se si utilizza la notazione di Windows, fare attenzione che si deve backslash escape se non si utilizza standard_conforming_strings = on - che è il default nella sua ultima versione 9.1 ma non nelle versioni precedenti. Come questo:

COPY data_table from E'C:\\tmp\\outputdata.csv' WITH ... 

Funziona in ogni caso.
Con standard_conforming_strings = on si potrebbe anche scrivere:

COPY data_table from 'C:\tmp\outputdata.csv' WITH ... 

Si noti che un server PostgreSQL di Windows capisce anche la notazione percorso predefinito con barre invece di backslash.

Per SQL COPY FROM/TO è possibile utilizzare qualsiasi percorso che il proprietario del server elabora (postgres per impostazione predefinita) dispone dell'autorizzazione alla lettura/scrittura.

Si noti che per il meta comando \copy del client psql si applicano le autorizzazioni dell'utente locale corrente.

+0

Grazie per la spiegazione. – Jeiman

+0

Non utilizzare il comando COPY con pgAdmin su un computer Windows e provare a leggere un file dal proprio ambiente Windows locale. Questo fallirà. Puoi comunque importare un file CSV. Usa la GUI per farlo. Fare clic con il tasto destro sulla tabella desiderata e selezionare l'importazione ... – R13e

5

Sì, naturalmente è possibile specificare qualsiasi posizione in cui si dispone dell'accesso in lettura. Non c'è alcun problema nel cambiare il percorso del file.

Mantenere l'attenzione solo sul fatto che sulle finestre si deve sfuggire alla barra rovesciata in questo modo:

copy data_table from 'c:\\Temp\\outputdata.csv' WITH DELIMITER AS ',' CSV QUOTE AS '"';