web-dev-qa-db-ja.com

psql - コマンドの結果をファイルに保存する

私はpsqlの\dtを使ってデータベース内のすべてのテーブルを一覧表示していますが、結果を保存する必要があります。

Psqlコマンドの結果をファイルにエクスポートするための構文は何ですか?

227
pstanton

Psqlの助けから(\?):

\ o [FILE]すべての問い合わせ結果をファイルまたはパイプに送る

一連のコマンドは次のようになります。

[wist@scifres ~]$ psql db
Welcome to psql 8.3.6, the PostgreSQL interactive terminal

db=>\o out.txt
db=>\dt
db=>\q

[wist@scifres ~]$ 
386
jhwist

Psqlの\oコマンドは、jhwistによって既に記述されています。

別の方法は、COPY TOコマンドを使用してサーバー上のファイルに直接書き込むことです。これには、psqlの表形式ではなく、選択しやすい解析しやすい形式でダンプされるという利点があります。 COPY FROMを使って別のテーブル/データベースにインポートするのもとても簡単です。

NB!これにはスーパーユーザー特権が必要で、サーバー上のファイルに書き込みます

例:COPY (SELECT foo, bar FROM baz) TO '/tmp/query.csv' (format csv, delimiter ';')

';'でCSVファイルを作成しますフィールド区切り文字として。

いつものように 詳細はドキュメントを参照

82
intgr

postgresコマンドである\copyはどのユーザにも使えます。それが\ dtに対して機能するかどうかわからないが、一般的な構文は以下のリンクから再現される Postgres SQLコピー構文

\copy (select * from tempTable limit 100) to 'filenameinquotes' with header delimiter as ','

上記は、選択クエリの出力をcsvファイルとして提供されたファイル名で保存します。

編集:

私のpsqlサーバでは、以下のコマンドが動作しますこれは古いバージョンv8.5です

copy (select * from table1) to 'full_path_filename' csv header;
17
Aakash Gupta

次のエラーが発生した場合はufgtoolspg=> COPY (SELECT foo, bar FROM baz) TO '/tmp/query.csv' (format csv, delimiter ';') ; ERROR: must be superuser to COPY to or from a file HINT: Anyone can COPY to stdout or from stdin. psql's \copy command also works for anyone.

このように実行することができます。

psql somepsqllink_or_credentials -c "COPY (SELECT foo, bar FROM baz) TO STDOUT (format csv, delimiter ';')" > baz.csv

2
Daniil Mashkin

COPY tablename TO '/tmp/output.csv' DELIMITER ',' CSV HEADER;このコマンドはテーブル全体をcsvとして保存するために使用されます。

2
Stephen

このための内部psqlコマンドがいくつかあると思いますが、 til-linux-ng パッケージからscriptコマンドを実行することもできます。

スクリプトはあなたの端末に印刷されたすべてのもののTypeScriptを作成します。

1
hlovdal