экспортировать таблицу в файл csv с помощью COPY в postgres и предложением уменьшить размер файла csv

Я пытаюсь экспортировать таблицу в БД Postgres в CSV-файл с помощью команды COPY, и размер CSV-файла результата очень велик.

Ниже приведена команда для экспорта их в файл csv.

Фактический размер таблицы: 600 МБ
Размер CSV-файла результата: 162 МБ.

Команда:

\copy cities to '/var/lib/pgsql/cities.csv' DELIMITER ',' CSV HEADER;

Может ли кто-нибудь посоветовать, как уменьшить размер файла csv?

Это поведение команды COPY по умолчанию? Можем ли мы уменьшить размер файла?


person Siva    schedule 04.03.2020    source источник
comment
Единственный способ уменьшить размер — экспортировать меньше строк или столбцов. Но если вам нужны все данные, я не вижу способа уменьшить размер   -  person a_horse_with_no_name    schedule 04.03.2020
comment
Вы можете сжать файл CSV с помощью zip, bzip или аналогичного инструмента.   -  person Jeremy    schedule 04.03.2020
comment
Спасибо a_horse_with_no_name и Джереми.   -  person Siva    schedule 05.03.2020


Ответы (2)


Вы можете сжать файл на лету:

\copy cities TO PROGRAM 'gzip -9 > /var/lib/pgsql/cities.csv.gz' (DELIMITER ',', FORMAT 'csv', HEADER)
person Laurenz Albe    schedule 04.03.2020
comment
Я мог бы экспортировать данные таблицы в файл CSV, но размер экспортированного файла CSV составлял около 162 МБ. Пока я пытаюсь открыть Excel, это занимает много времени, а также при применении vlookup к Excel зависает. - person Siva; 05.03.2020
comment
Я пытаюсь добиться следующих результатов с помощью команды COPY: 1. Экспортируемый CSV-файл должен иметь размер не более 10 МБ. 2. Файл Excel должен открываться быстро и без проблем (например, зависаний) выполнять vlookup. - person Siva; 05.03.2020
comment
Можно ли добиться вышеперечисленных вещей в моем случае использования? - person Siva; 05.03.2020
comment
Тогда ваш единственный вариант — экспортировать меньше данных. - person Laurenz Albe; 05.03.2020
comment
Это не сработало для меня. ERROR: syntax error at or near "'gzip -9 > ./myfile.csv.gz'" LINE 1: COPY ttempo TO STDOUT 'gzip -9 > ./myfile.csv.gz' (DELI... - person arilwan; 05.03.2020

Вы можете сжать его позже. Или вы можете сжать его на лету:

\copy cities to PROGRAM 'gzip > /var/lib/pgsql/cities.csv.gz' DELIMITER ',' CSV HEADER;

Конечно, вы можете заменить gzip на pigz или bzip2 или pxz или на любой другой ваш любимый потоковый компрессор.

person jjanes    schedule 04.03.2020
comment
@arilwan не используйте версии, предшествующие динозаврам. - person jjanes; 05.03.2020
comment
Здесь важна версия psql, а не сервера. - person jjanes; 05.03.2020