Exportar a tabela PostgreSQL para o ficheiro CSV com os títulos
estou a tentar exportar uma tabela PostgreSQL com títulos para um ficheiro CSV através da linha de comandos, no entanto consigo que seja exportada para o ficheiro CSV, mas sem títulos. Também preciso dessas rubricas. O meu código é o seguinte
COPY products_273 to '/tmp/products_199.csv' delimiters',';
9 answers
COPY products_273 TO '/tmp/products_199.csv' DELIMITER ',' CSV HEADER;
Tal como descrito no manual .
Da linha de comandos psql:
\COPY my_table TO 'filename' CSV HEADER
Sem ponto e vírgula no fim.
Em vez de apenas o nome da tabela, você também pode escrever uma pesquisa para obter apenas dados de coluna seleccionados.
COPY (select id,name from tablename) TO 'filepath/aa.csv' DELIMITER ',' CSV HEADER;
Com privilégio de administração
\COPY (select id,name from tablename) TO 'filepath/aa.csv' DELIMITER ',' CSV HEADER;
Quando Não tenho permissão para escrever um ficheiro a partir do Postgres, descubro que posso executar a consulta a partir da linha de comandos.
psql -U user -d db_name -c "Copy (Select * From foo_table LIMIT 10) To STDOUT With CSV HEADER DELIMITER ',';" > foo_data.csv
Isto funciona
psql dbname -F , --no-align -c "SELECT * FROM TABLE"
Para a versão 9.5 que eu uso, seria assim:
COPY products_273 TO '/tmp/products_199.csv' WITH (FORMAT CSV, HEADER);
Primeiro tive que mudar a codificação do cliente para utf8 assim: \encoding UTF8
Em seguida, despejou os dados para um arquivo CSV isto:
\copy (SELECT * FROM my_table) TO C://wamp64/www/spider/chebi2/dump.csv CSV DELIMITER '~'
Usei ~ como delimitador porque não gosto de ficheiros CSV, normalmente uso ficheiros TSV, mas não me deixa adicionar '\t' como delimitador, por isso usei ~ porque é um characeter raramente usado.
Copiar (anysql query datawanttoexport) para 'fileablsoutepathwihname ' delimiter', ' csv header;
A utilização deste u também pode exportar dados.
Esta solução funcionou para mim 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 ',');"