PostgreSQL: экспорт полученных данных из SQL-запроса в Excel / CSV - PullRequest
21 голосов
/ 14 ноября 2011

Мне нужно экспортировать полученные данные из запроса в PostgreSQL в Excel / CSV.
Я использую PostgreSQL 8.2.11.

SQL error:

ERROR:  relative path not allowed for COPY to file
In statement:

COPY (select distinct(m_price) from m_product)TO '"c:\auto_new.txt"';

Ответы [ 6 ]

35 голосов
/ 14 ноября 2011

Пример с именем файла в стиле Unix:

COPY (SELECT * FROM tbl) TO '/var/lib/postgres/myfile1.csv' format csv;

Прочтите руководство о COPY (ссылка на версию 8.2).
Вы должны использовать абсолютный путь для целевого файла. Не забудьте заключить в кавычки имена файлов с пробелами. Пример для MS Windows:

COPY (SELECT * FROM tbl)
TO E'"C:\\Documents and Settings\\Tech\Desktop\\myfile1.csv"' format csv;

В PostgreSQL 8.2 , с standard_conforming_strings = off по умолчанию, вам необходимо удвоить обратную косую черту, поскольку \ является специальным символом и интерпретируется PostgreSQL. Работает в любой версии. Это все в прекрасном руководстве :

имя файла

& emsp; Абсолютный путь к файлу ввода или вывода. Пользователям Windows может потребоваться использовать строку E'' и двойные обратные слеши, используемые в качестве разделителей пути.

Или современный синтаксис с standard_conforming_strings = on (по умолчанию начиная с Postgres 9.1):

COPY tbl  -- short for (SELECT * FROM tbl)
TO '"C:\Documents and Settings\Tech\Desktop\myfile1.csv"' (format csv);

Или вы можете также использовать косую черту для имен файлов в Windows.

Альтернативой является использование мета-команды \copy терминального клиента по умолчанию psql.

Вы также можете использовать графический интерфейс, например pgadmin и копировать / вставлять из таблицы результатов в Excel для небольших запросов.

Тесно связанный ответ:

Аналогичное решение для MySQL:

6 голосов
/ 19 августа 2015

В PostgreSQL 9.4 для создания в файл CSV с заголовком в Ubuntu :

COPY (SELECT * FROM tbl) TO '/home/user/Desktop/result_sql.csv' WITH CSV HEADER;

Примечание: папка должна быть доступна для записи.

3 голосов
/ 16 января 2013

Это сработало для меня:

COPY (SELECT * FROM table) 
    TO E'C:\\Program Files (x86)\\PostgreSQL\\8.4\\data\\try.csv';

В моем случае проблема была в разрешении на запись в специальную папку (хотя я работаю администратором), после изменения пути к исходной папке данных в PostgreSQL у меня был успех.

2 голосов
/ 04 сентября 2014

Если у вас есть ошибка типа «ОШИБКА: не удалось открыть файл сервера» / file «: Permission denied», вы можете исправить это так:

Пробежал через ту же проблему, и вот решение, которое я нашел: Создайте новую папку (например, tmp) в / home $ cd / home сделать postgres владельцем этой папки $ chown -R postgres: postgres tmp скопируйте в tmp файлы, которые вы хотите записать в базу данных, и убедитесь, что они также принадлежат postgres. Вот и все. Вы должны быть в бизнесе после этого.

2 голосов
/ 14 ноября 2011

Несколько инструментов графического интерфейса, таких как Squirrel, SQL Workbench / J, AnySQL, ExecuteQuery, могут экспортировать в файлы Excel.

Большинство из этих инструментов перечислены в вики PostgreSQL:

http://wiki.postgresql.org/wiki/Community_Guide_to_PostgreSQL_GUI_Tools

0 голосов
/ 04 сентября 2014

Правильный скрипт для postgres (Ubuntu):

COPY (SELECT * FROM tbl) TO '/var/lib/postgres/myfile1.csv';
...