Domanda

Sto cercando di esportare una tabella di PostgreSQL con intestazioni in un file CSV tramite linea di comando, ma ho capito di esportare in un file CSV, ma senza intestazioni.

Il mio codice si presenta come segue:

COPY products_273 to '/tmp/products_199.csv' delimiters',';
È stato utile?

Soluzione

COPY products_273 TO '/tmp/products_199.csv' WITH (FORMAT CSV, HEADER);

come descritto nella manuale .

Altri suggerimenti

Da riga di comando psql:

\COPY my_table TO 'filename' CSV HEADER

nessun punto e virgola alla fine.

invece di nome della tabella, è possibile anche scrivere una query per ottenere i dati della colonna solo selezionati.

COPY (select id,name from tablename) TO 'filepath/aa.csv' DELIMITER ',' CSV HEADER;

con i privilegi di amministratore

\COPY (select id,name from tablename) TO 'filepath/aa.csv' DELIMITER ',' CSV HEADER;

Quando non ho il permesso di scrivere un file fuori da Postgres Trovo che posso eseguire la query dalla riga di comando.

psql -U user -d db_name -c "Copy (Select * From foo_table LIMIT 10) To STDOUT With CSV HEADER DELIMITER ',';" > foo_data.csv

Questo funziona

psql dbname -F , --no-align -c "SELECT * FROM TABLE"

Per la versione 9.5 che uso, sarebbe come questo:

COPY products_273 TO '/tmp/products_199.csv' WITH (FORMAT CSV, HEADER);

Questa soluzione ha funzionato per me usando \copy.

psql -h <host> -U <user> -d <dbname> -c "\copy <table_name> FROM '<path to csvfile/file.csv>' with (format csv,header true, delimiter ',');"

Ecco come ho ottenuto che funziona guscio di corrente utilizzando connnect PGsl a un database Heroku PG:

Ho dovuto cambiare prima la codifica utf8 cliente a questo modo: \encoding UTF8

Poi dumping i dati in un file CSV questo:

\copy (SELECT * FROM my_table) TO  C://wamp64/www/spider/chebi2/dump.csv CSV DELIMITER '~'

ho usato ~ come delimitatore, perché non mi piace file CSV, io di solito uso i file TSV, ma non mi permette di aggiungere '\ t' come delimitatore, quindi ho usato ~ perché è una characeter raramente utilizzato.

copia (AnySQL interrogazione datawanttoexport) a 'fileablsoutepathwihname' delimitatore '' intestazione csv;

Con questo u possibile esportare i dati anche.

sto postando questa risposta perché nessuna delle altre risposte qui riportati in realtà ha funzionato per me. Non ho potuto usare COPY dall'interno Postgres, perché non ho avuto le autorizzazioni corrette. Così ho scelto "righe della griglia Export" e salvato l'uscita come UTF-8.

La versione data dal psql @ Brian, inoltre, non ha funzionato per me, per un motivo diverso. La ragione per cui non ha funzionato è che a quanto pare il prompt dei comandi di Windows (stavo usando Windows) è stato immischiando in giro con la codifica da solo. Ho continuato a ottenere questo errore:

  

ERRORE: personaggio con sequenza di byte 0x81 nella codifica "win1252" ha equivalenti nella codifica "UTF8"

La soluzione che ho finito per usare era di scrivere una sceneggiatura breve JDBC (Java), che legge il file CSV e le istruzioni INSERT rilasciate direttamente nella mia tabella di Postgres. Questo ha funzionato, ma il prompt dei comandi anche avrebbe funzionato se non fosse stata alterando la codifica.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top