postgresql-copy pgadmin psql - PostgreSQLのPL / pgSQL出力をCSVファイルに保存する



7 Answers

いくつかのソリューションがあります。

1 psqlコマンド

psql -d dbname -t -A -F"," -c "select * from users" > output.csv

これは、 ssh postgres@host commandように、SSH経由で使うことができるという大きな利点があります。

2 postgres copyコマンド

COPY (SELECT * from users) To '/tmp/output.csv' With CSV;

3 psqlのインタラクティブ(または非)

>psql dbname
psql>\f ','
psql>\a
psql>\o '/tmp/output.csv'
psql>SELECT * from users;
psql>\q

それらはすべてスクリプトで使用できますが、#1が好きです。

4 pgadminしかし、それはスクリプト可能ではありません。

整形 エクスポート 改行

PostgreSQLデータベースからCSVファイルにPL / pgSQL出力を保存する最も簡単な方法は何ですか?

私はPostgreSQL 8.4をpgAdmin IIIとPSQLプラグインで使用しています。ここで私はクエリを実行します。




ヘッダーとともに特定のテーブルのすべての列に興味がある場合は、

COPY table TO '/some_destdir/mycsv.csv' WITH CSV HEADER;

これは、

COPY (SELECT * FROM table) TO '/some_destdir/mycsv.csv' WITH CSV HEADER;

私の知る限りでは同等です。




psqlはこれを行うことができます:

edd@ron:~$ psql -d beancounter -t -A -F"," \
                -c "select date, symbol, day_close " \
                   "from stockprices where symbol like 'I%' " \
                   "and date >= '2009-10-02'"
2009-10-02,IBM,119.02
2009-10-02,IEF,92.77
2009-10-02,IEV,37.05
2009-10-02,IJH,66.18
2009-10-02,IJR,50.33
2009-10-02,ILF,42.24
2009-10-02,INTC,18.97
2009-10-02,IP,21.39
edd@ron:~$

ここで使用するオプションについては、 man psqlを参照してください。




CSV輸出統一

この情報は実際にはうまく表現されていません。 これを派生させる必要があるのは今回が2度目なので、私は何もしなければ自分自身に思い出させるためにここに入れます。

本当にこれを行う最良の方法(ポストグルからCSVを取得する)は、 COPY ... TO STDOUTコマンドを使用することCOPY ... TO STDOUT 。 あなたはそれをここの答えに示された方法でやりたいとは思わないが。 このコマンドを使用する正しい方法は次のとおりです。

COPY (select id, name from groups) TO STDOUT WITH CSV HEADER

1つのコマンドだけを覚

ssh上での使用には最適です。

$ ssh psqlserver.example.com 'psql -d mydb "COPY (select id, name from groups) TO STDOUT WITH CSV HEADER"' > groups.csv

ssh上のドッカー内での使用には最適です。

$ ssh pgserver.example.com 'docker exec -tu postgres postgres psql -d mydb -c "COPY groups TO STDOUT WITH CSV HEADER"' > groups.csv

それはローカルマシン上ですばらしいです。

$ psql -d mydb -c 'COPY groups TO STDOUT WITH CSV HEADER' > groups.csv

ローカルマシンのドッカーの中に?:

docker exec -tu postgres postgres psql -d mydb -c 'COPY groups TO STDOUT WITH CSV HEADER' > groups.csv

またはkubernetesクラスター上で、ドッカーで、HTTPSを介して??:

kubectl exec -t postgres-2592991581-ws2td 'psql -d mydb -c "COPY groups TO STDOUT WITH CSV HEADER"' > groups.csv

とても汎用性があり、多くのカンマ!

あなたもですか?

はい、私はしました、ここに私のメモがあります:

COPYses

/copyを使用すると、 psqlコマンドが実行されているシステム上でファイル操作が効果的に実行されます。 リモートサーバに接続する場合、 psqlを実行しているシステム上のデータファイルをリモートサーバにコピーするのは簡単です。

COPYは、バックエンドプロセスのユーザーアカウント(デフォルトのpostgres )としてサーバー上でファイル操作を実行し、ファイルパスとアクセス許可がチェックされ、それに応じて適用されます。 TO STDOUTを使用すると、ファイル許可チェックがバイパスされます。

結果のCSVを最終的に存在させたいシステム上でpsqlが実行されていない場合、これらのオプションはどちらも後続のファイル移動を必要とします。 私が経験したことは、主にリモートサーバーで作業する場合、これが最も可能性の高いケースです。

シンプルなCSV出力のためにssh経由でTCP / IPトンネルのようなものをリモートシステムに設定するのはもっと複雑ですが、他の出力形式(バイナリ)の場合は、トンネル接続を介して/copy行い、ローカルのpsql実行する方が良いかもしれません。 同様に、大量のインポートでは、ソースファイルをサーバーに移動し、 COPYを使用するのがおそらく最高性能のオプションです。

PSQLのパラメータ

psqlパラメータを使用すると、CSVのような出力をフォーマットできますが、ページャを無効にしてヘッダーを取得しないように覚えておく必要があるという欠点があります。

$ psql -P pager=off -d mydb -t -A -F',' -c 'select * from groups;'
2,Technician,Test 2,,,t,,0,,                                                                                                                                                                   
3,Truck,1,2017-10-02,,t,,0,,                                                                                                                                                                   
4,Truck,2,2017-10-02,,t,,0,,

その他のツール

いいえ、ちょうどツールをコンパイルしたりインストールしたりせずにサーバーからCSVを取り出したいだけです。




私はpsql2csvという小さなツールを書いています。これは、 COPY query TO STDOUTパターンにカプセル化して、適切なCSVを生成します。 インターフェイスはpsql似ています。

psql2csv [OPTIONS] < QUERY
psql2csv [OPTIONS] QUERY

問合せは、STDIN(存在する場合)または最後の引数の内容と見なされます。 その他の引数はすべて、次のものを除いてpsqlに転送されます:

-h, --help           show help, then exit
--encoding=ENCODING  use a different encoding than UTF8 (Excel likes LATIN1)
--no-header          do not output a header



私はいくつかのことを試しましたが、それらのうちのいくつかがヘッダーの詳細を持つ希望のCSVを与えることができました。

ここでは私のために働いています。

psql -d dbame -U username -c "CSVヘッダー付きの標準出力にコピーする(SELECT * FROM TABLE)"> OUTPUT_CSV_FILE.csv




import json
cursor = conn.cursor()
qry = """ SELECT details FROM test_csvfile """ 
cursor.execute(qry)
rows = cursor.fetchall()

value = json.dumps(rows)

with open("/home/asha/Desktop/Income_output.json","w+") as f:
    f.write(value)
print 'Saved to File Successfully'



Related