PostgreSQL: экспорт результирующих данных из SQL-запроса в Excel / CSV

мне нужно экспортировать полученные данные из запроса в 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 ответов


пример с именем файла в стиле 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. Работает в любой версии. Это все в порядке руководства:

имя файла

абсолютный путь к входному или выходному файлу. Пользователям 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.

вы также можете использовать GUI как pgAdmin попробуйте и копировать / вставить из таблицы результатов в Excel для небольших запросов.

тесно связан ответ:

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


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

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

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


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

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

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


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

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

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


Если у вас есть ошибка, как "ошибка: не удалось открыть файл сервера "/ файл": разрешение отказано" вы можете исправить это:

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


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

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