Вывод в CSV в postgres с двойными кавычками
попытка сбросить вывод запроса в CSV-файл в автоматическом задании и проблема с полями, где столбец содержит мой разделитель запятой. С характером этой конкретной сети, мне приходится прыгать через пару обручов, чтобы сделать что-то, и есть хороший шанс, что я упускаю что-то очень очевидное.
короче говоря, я запускаю свой скрипт с клиентской машины, которая использует PLINK для запуска удаленной команды psql на другом поле через SSH-соединение. Эта команда psql поражает сервер Postgres на третьей машине (я не могу подключиться непосредственно от клиента к БД, следовательно, дополнительный шаг между ними).
если я вручную SSH от клиента к серверу 1, подключитесь к коробке Postgres и используйте copy... с заголовком CSV созданный файл идеален, и любые поля, содержащие запятую, автоматически окружаются двойными кавычками.
однако, если я попытаюсь выполнить команду copy (или copy) в одной команде, вывод не содержит этих двойных кавычек, поэтому я оказываюсь в ситуации, когда запятые в поле интерпретируются как разделитель позже.
другими словами, это необходимые двойные кавычки:
- SSH от клиента к server1.
- база данных psql-Uuser-h server2
- copy (select ...) to ' ~ / myfile.csv ' с заголовком CSV;
но не:
- SSH от клиента к сервер1
psql -Uuser -h server2 database -c "copy (select ...) to '~/myfile.csv' with CSV header;"
1 ответов
используя FORCE_QUOTE
вот как это сделать:
psql -U user -h server2 database -c "\copy (select ...) to '~/myfile.csv' WITH (FORMAT CSV, HEADER TRUE, FORCE_QUOTE *);"
COPY
команда документация