Ответ 1
Хитрость заключается в том, чтобы сделать COPY
отправить свой вывод на stdout, затем передать вывод через gzip:
psql -c "COPY foo_table TO stdout DELIMITER ',' CSV HEADER" \
| gzip > foo_table.csv.gz
Мне нужно экспортировать большую таблицу в файл csv и сжать ее.
Я могу экспортировать его с помощью команды COPY из postgres like -
COPY foo_table to '/tmp/foo_table.csv' delimiters',' CSV HEADER;
А потом можно сжать его с помощью gzip like -
gzip -c foo_table.csv > foo.gz
Проблема с этим подходом заключается в том, что мне нужно создать этот промежуточный файл csv, который сам по себе огромен, прежде чем я получу свой окончательный сжатый файл.
Есть ли способ экспортировать таблицу в csv и сжать файл за один шаг?
С уважением, Sujit
Хитрость заключается в том, чтобы сделать COPY
отправить свой вывод на stdout, затем передать вывод через gzip:
psql -c "COPY foo_table TO stdout DELIMITER ',' CSV HEADER" \
| gzip > foo_table.csv.gz
Развернув бит в ответ @Joey, ниже добавлена поддержка еще нескольких функций, доступных в руководстве.
psql -c "COPY \"Foo_table\" (column1, column2) TO stdout DELIMITER ',' CSV HEADER" \
| gzip > foo_table.csv.gz
Если у вас есть заглавные буквы в имени вашей таблицы (горе вам надобно), вам нужно \"
до и после имени таблицы.
Второе, что я добавил, это список столбцов.
Также обратите внимание на документы:
Эта операция не так эффективна, как команда SQL COPY, потому что все данные должны проходить через соединение клиент/сервер. Для больших объемов данных команда SQL может быть предпочтительной.