コマンドラインを使用して、見出しのあるPostgreSQLテーブルをCSVファイルにエクスポートしようとしていますが、CSVファイルにエクスポートできますが、見出しはありません。
私のコードは次のようになります:
COPY products_273 to '/tmp/products_199.csv' delimiters',';
コマンドラインを使用して、見出しのあるPostgreSQLテーブルをCSVファイルにエクスポートしようとしていますが、CSVファイルにエクスポートできますが、見出しはありません。
私のコードは次のようになります:
COPY products_273 to '/tmp/products_199.csv' delimiters',';
回答:
COPY
管理者権限が必要です。\COPY
問題が発生した場合は、代わりに使用してください。
COPY products_273 TO '/tmp/products_199.csv' WITH (FORMAT CSV, HEADER);
psqlコマンドラインから:
\COPY my_table TO 'filename' CSV HEADER
最後にセミコロンはありません。
COPY
コマンドが管理者アクセスを必要とするため、このバージョンは断然最高です
psql
アプローチでは、アクセスできる場所であればどこにでも出力を保存できます。私はpsql
アプローチを使用して、リモートサーバーからローカルファイルにデータを取得しました。とても滑らかです。
pg_dump -h remote | pg_restore -h localhost
ます。
psql -c "\COPY (SELECT * FROM mytable) TO STDOUT" > mytable.csv
テーブル名だけでなく、選択した列データのみを取得するクエリを作成することもできます。
COPY (select id,name from tablename) TO 'filepath/aa.csv' DELIMITER ',' CSV HEADER;
管理者権限あり
\COPY (select id,name from tablename) TO 'filepath/aa.csv' DELIMITER ',' CSV HEADER;
\COPY ...
)。そして、少なくとも私のバージョンのpsql(9.5.2)では、「DELIMITER」を指定する必要はありませんでした。デフォルトはコンマでした。
Postgresからファイルを書き出す権限がない場合、コマンドラインからクエリを実行できることがわかります。
psql -U user -d db_name -c "Copy (Select * From foo_table LIMIT 10) To STDOUT With CSV HEADER DELIMITER ',';" > foo_data.csv
これは機能します
psql dbname -F , --no-align -c "SELECT * FROM TABLE"
-F ,
、|
セパレータとして使用します。ありがとう!
COPY
、再利用するファイルを作成するステートメントよりも人間が読むことを目的としています
私が使用するバージョン9.5の場合、次のようになります。
COPY products_273 TO '/tmp/products_199.csv' WITH (FORMAT CSV, HEADER);
Hergs PGデータベースへのpgsl接続を使用して、Power Shellを動作させる方法を次に示します。
最初に、クライアントのエンコーディングを次のようにutf8に変更する必要がありました。 \encoding UTF8
次に、データを次のCSVファイルにダンプしました。
\copy (SELECT * FROM my_table) TO C://wamp64/www/spider/chebi2/dump.csv CSV DELIMITER '~'
CSVファイルが好きではないため、区切り文字として〜を使用しました。通常はTSVファイルを使用しますが、区切り文字として「\ t」を追加できないため、めったに使用されない文字である〜を使用しました。
(anysqlクエリdatawanttoexport)を 'fileablsoutepathwihname'区切り文字 '、' csvヘッダーにコピーします。
これを使用すると、データをエクスポートすることもできます。
ここに記載されている他の回答はどれも実際には役に立たなかったため、私はこの回答を投稿しています。使えなかったCOPY
正しい権限を持っていなかったため、Postgresから。そこで、「グリッド行のエクスポート」を選択し、出力をUTF-8として保存しました。
psql
@Brianによって与えられたバージョンも別の理由のために、私のために動作しませんでした。それが機能しなかった理由は、明らかにWindowsコマンドプロンプト(私はWindowsを使用していた)がエンコード自体をいじっていたためです。私はこのエラーを受け続けました:
エラー:エンコーディング「WIN1252」のバイトシーケンス0x81の文字には、エンコーディング「UTF8」に同等のものはありません
私が最終的に使用したソリューションは、CSVファイルを読み取り、挿入ステートメントをPostgresテーブルに直接発行する短いJDBCスクリプト(Java)を記述することでした。これは機能しましたが、エンコードを変更していなければ、コマンドプロンプトも機能しました。