Ответ 1
COPY products_273 TO '/tmp/products_199.csv' WITH (FORMAT CSV, HEADER);
как описано в руководстве.
Я пытаюсь экспортировать таблицу PostgreSQL с заголовками в файл CSV через командную строку, однако я получаю ее для экспорта в файл CSV, но без заголовков. Мне также нужны эти заголовки. Мой код выглядит следующим образом
COPY products_273 to '/tmp/products_199.csv' delimiters',';
COPY products_273 TO '/tmp/products_199.csv' WITH (FORMAT CSV, HEADER);
как описано в руководстве.
Из командной строки psql:
\COPY my_table TO 'filename' CSV HEADER
нет точки с запятой в конце.
вместо имени таблицы вы также можете написать запрос для получения только выбранных данных столбца.
COPY (select id,name from tablename) TO 'filepath/aa.csv' DELIMITER ',' CSV HEADER;
с правами администратора
\COPY (select id,name from tablename) TO 'filepath/aa.csv' DELIMITER ',' CSV HEADER;
Когда у меня нет разрешения на запись файла из Postgres, я обнаруживаю, что могу запустить запрос из командной строки.
psql -U user -d db_name -c "Copy (Select * From foo_table LIMIT 10) To STDOUT With CSV HEADER DELIMITER ',';" > foo_data.csv
Это работает
psql dbname -F , --no-align -c "SELECT * FROM TABLE"
Для версии 9.5 я использую это:
COPY products_273 TO '/tmp/products_199.csv' WITH (FORMAT CSV, HEADER);
Это решение работало для меня, используя \copy
.
psql -h <host> -U <user> -d <dbname> -c "\copy <table_name> FROM '<path to csvfile/file.csv>' with (format csv,header true, delimiter ',');"
Вот как я получил рабочую силовую оболочку, используя pgsl connnect для базы данных Heroku PG:
Мне пришлось сначала изменить клиентскую кодировку на utf8 следующим образом: \encoding UTF8
Затем выгрузили данные в файл CSV:
\copy (SELECT * FROM my_table) TO C://wamp64/www/spider/chebi2/dump.csv CSV DELIMITER '~'
Я использовал ~ в качестве разделителя, потому что мне не нравятся CSV файлы, я обычно использую TSV файлы, но он не позволит мне добавить '\ t' в качестве разделителя, поэтому я использовал ~ потому что его редко используется characeter.
копировать (anysql query datawanttoexport) в 'fileablsoutepathwihname' delimiter ',' csv header;
Использование этого u также может экспортировать данные.
Я публикую этот ответ, потому что ни один из приведенных здесь ответов на самом деле не работал для меня. Я не мог использовать COPY
из Postgres, потому что у меня не было правильных разрешений. Поэтому я выбрал "Экспортировать строки сетки" и сохранил вывод как UTF-8.
Версия psql
предоставленная @Brian, также не работает для меня по другой причине. Причина, по которой это не сработало, заключается в том, что, очевидно, командная строка Windows (я использовал Windows) сама вмешивалась в кодировку. Я продолжал получать эту ошибку:
ОШИБКА: символ с байтовой последовательностью 0x81 в кодировке "WIN1252" не имеет эквивалента в кодировке "UTF8"
В итоге я решил написать короткий JDBC-скрипт (Java), который считывал файл CSV и выдавал операторы вставки прямо в мою таблицу Postgres. Это работало, но командная строка также работала бы, если бы она не изменяла кодировку.
Кажется, для вывода имен столбцов не существует флаг COPY
. Другой способ сделать это - выбрать информацию столбца из системный каталог (pg_catalog), вывести его в файл csv, запустить вашу копию и, наконец, cat
два файла вместе.
В сети есть множество инструментов для экспорта, поэтому вы должны найти один шаг script, который делает это (или записывать свой собственный в bash или powershell).