web-dev-qa-db-ja.com

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"';
22
Ghostman

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.2standard_conforming_strings = off デフォルトでは、\は特殊文字であり、PostgreSQLによって解釈されます。どのバージョンでも動作します。それはすべてです 細かいマニュアルで

filename

入力ファイルまたは出力ファイルの絶対パス名。 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でファイル名に スラッシュも使用 を使用できます。

別の方法は、 meta-command \copyデフォルトの端末クライアントのpsql

pgadmin のようなGUIを使用して、小さなクエリ用に結果グリッドからExcelにコピー/貼り付けすることもできます。

密接に関連した答え:

MySQLの同様のソリューション:

37

PostgreSQL 9.4で、ヘッダーがbuntのCSVファイルを作成します:

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

注:フォルダーは書き込み可能である必要があります。

6
Revol89

これは私のために働いた:

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

私の場合、問題は特別なフォルダーへの書き込み権限にありました(私は管理者として働いていますが)。PostgreSQLの下で元のデータフォルダーへのパスを変更した後、成功しました。

3
Celia

Squirrel、SQL Workbench/J、AnySQL、ExecuteQueryなどのいくつかのGUIツールは、Excelファイルにエクスポートできます。

これらのツールのほとんどは、PostgreSQL wikiにリストされています。

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

「エラー:サーバーファイル "/ file"を開けませんでした:許可が拒否されました」などのエラーがある場合は、次のように修正できます。

同じ問題を駆け抜け、これが私が見つけた解決策です:/ home $ cd/homeの下に新しいフォルダー(たとえば、tmp)を作成し、postgresをそのフォルダーの所有者にします$ chown -R postgres:postgres tmp copy in tmpデータベースに書き込みたいファイルを、postgresが所有していることを確認してください。それでおしまい。その後、ビジネスを開始する必要があります。

2
Michael

Postgres(Ubuntu)の正しいスクリプトは次のとおりです。

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