Jak wyeksportować tabelę jako CSV z nagłówkami w Postgresql?

Próbuję wyeksportować tabelę PostgreSQL z nagłówkami do pliku CSV za pomocą linii poleceń, jednak dostaję ją do eksportu do pliku CSV, ale bez nagłówków.

Mój kod wygląda następująco:

COPY products_273 to '/tmp/products_199.csv' delimiters',';
Author: ivanleoncz, 2009-07-13

13 answers

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

Jak opisano w instrukcji .

 616
Author: Milen A. Radev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-11-28 14:20:04

Z linii poleceń psql:

\COPY my_table TO 'filename' CSV HEADER

Brak dwukropka na końcu.

 231
Author: Laurent Debricon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-24 15:41:47

Zamiast tylko nazwy tabeli, możesz również napisać zapytanie o uzyskanie tylko wybranych danych kolumn.

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

Z uprawnieniami administratora

\COPY (select id,name from tablename) TO 'filepath/aa.csv' DELIMITER ',' CSV HEADER;
 128
Author: Dhruvil Thaker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-02 16:39:15

Kiedy nie mam uprawnień do zapisu pliku z Postgres, stwierdzam, że mogę uruchomić zapytanie z linii poleceń.

psql -U user -d db_name -c "Copy (Select * From foo_table LIMIT 10) To STDOUT With CSV HEADER DELIMITER ',';" > foo_data.csv
 105
Author: Brian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-01 17:32:00

To działa

psql dbname -F , --no-align -c "SELECT * FROM TABLE"
 35
Author: jordg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-13 06:17:52

Dla wersji 9.5 używam, byłoby tak:

COPY products_273 TO '/tmp/products_199.csv' WITH (FORMAT CSV, HEADER);
 8
Author: maytham-ɯɐɥʇʎɐɯ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-13 00:26:04

To rozwiązanie działało dla mnie za pomocą \copy.

psql -h <host> -U <user> -d <dbname> -c "\copy <table_name> FROM '<path to csvfile/file.csv>' with (format csv,header true, delimiter ',');"
 7
Author: Atihska,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-04 15:43:46

Najprostszy sposób (za pomocą psql) wydaje się być przez użycie --csv flagi:

psql --csv -c "SELECT * FROM products_273" > '/tmp/products_199.csv'
 7
Author: Yan Foto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-10-24 15:38:47

Heres jak to działa power shell używając pgsl connnect do bazy danych Heroku PG:

Musiałem najpierw zmienić kodowanie klienta na utf8 tak: \encoding UTF8

Następnie wrzucił dane do pliku CSV to:

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

Użyłem ~ jako ogranicznika, ponieważ nie lubię plików CSV, zwykle używam plików TSV, ale to nie pozwala mi dodać' \t ' jako ogranicznik, więc użyłem ~ ponieważ jest to rzadko używany characeter.

 4
Author: Horse O'Houlihan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-26 19:31:29

Copy (anysql query datawanttoexport) to 'fileablsoutepathwihname ' delimiter', ' CSV header;

Za pomocą tego u można również eksportować dane.

 0
Author: user3767321,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-10 06:44:46

Zamieszczam tę odpowiedź, ponieważ żadna z innych odpowiedzi podanych tutaj nie zadziałała na mnie. Nie mogłem używać COPY z poziomu Postgres, ponieważ nie miałem poprawnych uprawnień. Wybrałem więc "Eksportuj wiersze siatki" i zapisałem wyjście jako UTF-8.

Wersja psql podana przez @ Brian również nie zadziałała dla mnie, z innego powodu. Powodem, dla którego nie zadziałało, jest to, że najwyraźniej wiersz polecenia systemu Windows (używałem systemu Windows) mieszał się z kodowaniem samodzielnie. Ciągle dostaję ten błąd:

Błąd: znak o sekwencji bajtów 0x81 w kodowaniu "WIN1252" nie ma odpowiednika w kodowaniu "UTF8"

Rozwiązaniem, którego użyłem, było napisanie krótkiego skryptu JDBC (Java), który odczytał plik CSV i wydał instrukcje insert bezpośrednio do mojej tabeli Postgres. To zadziałało, ale wiersz polecenia również zadziałałby, gdyby nie zmieniał kodowania.

 0
Author: Tim Biegeleisen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-06-27 10:27:09

Spróbuj tego: "COPY products_273 FROM' \tmp\products_199.csv 'DELIMITER', 'nagłówek CSV'

 0
Author: Mohit Singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-30 08:18:36

The Kopiuj dowództwo nie jest tym, co jest ograniczone. Ograniczeniem jest kierowanie wyjścia z na do dowolnego miejsca poza STDOUT. Nie ma jednak ograniczeń w określaniu pliku wyjściowego poprzez \o dowództwo.

\o '/tmp/products_199.csv';
COPY products_273 TO STDOUT WITH (FORMAT CSV, HEADER);
 0
Author: A. Rick,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-12-17 18:16:20