Вывод в CSV в postgres с двойными кавычками

попытка сбросить вывод запроса в CSV-файл в автоматическом задании и проблема с полями, где столбец содержит мой разделитель запятой. С характером этой конкретной сети, мне приходится прыгать через пару обручов, чтобы сделать что-то, и есть хороший шанс, что я упускаю что-то очень очевидное.

короче говоря, я запускаю свой скрипт с клиентской машины, которая использует PLINK для запуска удаленной команды psql на другом поле через SSH-соединение. Эта команда psql поражает сервер Postgres на третьей машине (я не могу подключиться непосредственно от клиента к БД, следовательно, дополнительный шаг между ними).

если я вручную SSH от клиента к серверу 1, подключитесь к коробке Postgres и используйте copy... с заголовком CSV созданный файл идеален, и любые поля, содержащие запятую, автоматически окружаются двойными кавычками.

однако, если я попытаюсь выполнить команду copy (или copy) в одной команде, вывод не содержит этих двойных кавычек, поэтому я оказываюсь в ситуации, когда запятые в поле интерпретируются как разделитель позже.

другими словами, это необходимые двойные кавычки:

  1. SSH от клиента к server1.
  2. база данных psql-Uuser-h server2
  3. copy (select ...) to ' ~ / myfile.csv ' с заголовком CSV;

но не:

  1. SSH от клиента к сервер1
  2. 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 команда документация