sql >> データベース >  >> RDS >> PostgreSQL

入力CSVから一部の列のみをコピーしますか?

    その構文をどこで入手したかはわかりませんが、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を実行します 必要なデータだけを実際のターゲットテーブルに転送します。




    1. phpmyadminを削除するためのトリガーを作成する方法

    2. Mysqlはテーブル内のレコードを選択できません

    3. MariaDBでのSUBTIME()のしくみ

    4. Laravelでピボットテーブルと別のテーブルの関係を取得することは可能ですか?