その構文をどこで入手したかはわかりませんが、COPY
そのような列エイリアスのリストは取りません。ヘルプを参照してください:
COPY table_name [ ( column_name [, ...] ) ]
FROM { 'filename' | PROGRAM 'command' | STDIN }
[ [ WITH ] ( option [, ...] ) ]
(AS
リストされているオプションの1つではありません。完全な出力を表示するには、\d copy
を実行します psqlで、またはcopy
のマニュアルを参照してください オンラインコマンド)。
COPY
にはマッピング機能はありません これにより、入力CSVの一部の列のみを読み取ることができます。それは本当に便利でしょうが、まだ誰もそれを実装するための時間/関心/資金を持っていません。これは、とにかく人々が望んでいる多くのデータ変換/フィルタリングタスクの1つにすぎません。
PostgreSQLは、COPY
で指定された列リストを想定しています。 CSVファイルと同じ順序で、左から右に、CSVファイルに列があるのと同じ数のエントリがあります。したがって、次のように書くと:
COPY con (date,kgs)
その場合、PostgreSQLは正確に2つの列を持つ入力CSVを期待します。 。 "date"
の最初のcsv列を使用します "kgs"
のテーブル列と2番目のcsv列 テーブル列。 CSVヘッダーが何であるかは関係ありません。WITH (FORMAT CSV, HEADER ON)
を指定すると無視されます。 、またはHEADER
を指定しない場合は、通常のデータ行として扱われます 。
PostgreSQL9.4はFROM PROGRAM
を追加します COPY
へ 、したがって、シェルコマンドを実行してファイルを読み取り、フィルタリングすることができます。単純なPythonまたはPerlスクリプトで十分です。
小さいファイルの場合は、選択したスプレッドシートでcsvファイルとしてコピーを開き、不要な列を削除して保存するだけで、date
のみが表示されます。 およびkgs
列は残ります。
または、COPY
CSV
とすべて同じ列を持つステージングテーブルに 、次にINSERT INTO ... SELECT
を実行します 必要なデータだけを実際のターゲットテーブルに転送します。