Подтвердить что ты не робот

Использовать psql\copy для многострочного запроса

Это следующий вопрос из этого ответа для "Сохранить вывод PL/pgSQL из PostgreSQL в файл CSV".

Мне нужно написать CSV файл на стороне клиента, используя команду psql \copy. Один лайнер работает:

db=> \copy (select 1 AS foo) to 'bar.csv' csv header
COPY 1

Однако у меня есть длинные запросы, которые охватывают несколько строк. Мне не нужно показывать запрос, так как я не могу пропустить эту прошлую строку без ошибки синтаксического анализа:

db=> \copy (
\copy: parse error at end of line
db=> \copy ( \\
\copy: parse error at end of line
db=> \copy ("
\copy: parse error at end of line
db=> \copy "(
\copy: parse error at end of line
db=> \copy \\
\copy: parse error at end of line

Можно ли использовать \copy с запросом, который охватывает несколько строк? Я использую psql для Windows.

4b9b3361

Ответ 1

Рабочее решение, которое я имею сейчас, это создать временное представление, которое может быть объявлено на несколько строк, затем выберите его в \copy, которая удобно помещается на одной линии.

db=> CREATE TEMP VIEW v1 AS
db->   SELECT i
db->   FROM generate_series(1, 2) AS i;
CREATE VIEW
db=> \cd /path/to/a/really/deep/directory/structure/on/client
db=> \copy (SELECT * FROM v1) TO 'out.csv' csv header
COPY 2
db=> DROP VIEW v1;
DROP VIEW