私はPostgreSQLのテーブルを見出し付きのCSVファイルにエクスポートしようとしていますが、見出しなしでCSVファイルにエクスポートすることができます。これらの見出しも必要です。私のコードは次のようになります
COPY products_273 to '/tmp/products_199.csv' delimiters',';
COPY products_273 TO '/tmp/products_199.csv' WITH (FORMAT CSV, HEADER);
マニュアル で説明されているように。
Psqlコマンドラインから:
\COPY my_table TO 'filename' CSV HEADER
末尾にセミコロンはありません。
テーブル名だけでなく、選択した列データのみを取得するためのクエリを作成することもできます。
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;
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"
私が使っているバージョン9.5の場合、それは次のようになります。
COPY products_273 TO '/tmp/products_199.csv' WITH (FORMAT CSV, HEADER);
この解決法は\copy
を使って私のために働きました。
psql -h <Host> -U <user> -d <dbname> -c "\copy <table_name> FROM '<path to csvfile/file.csv>' with (format csv,header true, delimiter ',');"
Heroku PGデータベースに接続したpgslを使用して、Shellがどのように機能するかを説明します。
私は最初にこのようにクライアントエンコーディングをutf8に変更しなければなりませんでした:\encoding UTF8
それからデータをCSVファイルにダンプします。
\copy (SELECT * FROM my_table) TO C://wamp64/www/spider/chebi2/dump.csv CSV DELIMITER '~'
CSVファイルが気に入らないので〜を区切り文字として使用しましたが、通常TSVファイルを使用しますが、区切り文字として '\ t'を追加することはできません。そのため、〜を使用することはほとんどありません。キャラクター。
ここに記載されている他の回答はどれも実際に機能しなかったため、この回答を掲載しています。正しい権限を持っていなかったため、Postgres内からCOPY
を使用できませんでした。そこで、「グリッド行のエクスポート」を選択し、出力をUTF-8として保存しました。
@Brianが提供したpsql
バージョンも、別の理由で機能しませんでした。動作しなかった理由は、明らかにWindowsコマンドプロンプト(私はWindowsを使用していた)が、エンコード自体をいじっていたためです。私はこのエラーを続けました:
エラー:エンコード「WIN1252」のバイトシーケンス0x81の文字には、エンコード「UTF8」に相当するものがありません
最終的に使用した解決策は、CSVファイルを読み取り、Postgresテーブルに挿入ステートメントを直接発行する短いJDBCスクリプト(Java)を作成することでした。これは機能しましたが、エンコードを変更していなければコマンドプロンプトも機能していました。
(anysql query datawanttoexport)を 'fileablsoutepathwihname' delimiter '、' csv headerにコピーします。
これを使うとデータをエクスポートすることもできます。