Использовать 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.
Ответы
Ответ 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